推荐的AngularJS Spa中的身份验证UX具有自己和外部(Google,fb ..)配置文件



我正在开发ASP.NET MVC Web API AngularJS Spa。我想拥有几种注册/身份验证:

  • 自己的个人资料提供商
  • 外部提供商即Google,FB等。

可能的方案

  1. 由于我有一个水疗中心,最好将用户放在外部(或内部)时将用户放在页面上。我将显示一个具有加载特定内容的模态层(甚至可能在iframe中)。可以做到吗?在线示例?

  2. 具有按照往常的ASP.NET MVC全页重新加载控制器/视图实现的登录/注册功能,然后在成功的情况下将其重定向回我的水疗中心。如果用户想使用外部提供商进行身份验证/注册。

  3. ,请重定向到外部提供商。
  4. 其他任何可能性?

问题

  1. 您是如何在水疗中心做类似情况的?
  2. 我应该使用有关此的特定身份验证模式 - 例如,提供与外部的内部身份验证/注册相似的,因此SAP始终以相同的方式行事
  3. 我还必须在用户在水疗中心进行验证后,随后对我的Web API调用进行身份验证。有任何指导吗?

我只能对自己的经验发表评论,也许很有帮助。我们使用与您相同的堆栈,ASP.NET MVC Web API AngularJS。我们使用服务器端MVC进行身份验证(Microsoft.aspnet.Identity),因为在此阶段我们没有公开公共API,并且API的唯一消费者将是我们的SPA,这与最少的努力完美搭配。p>这也使我们能够在登录的服务器上设置USERCONTEXT ANGULAR服务,可以通过您的整个Angular应用程序共享,Google DoubleClick Manager伙计们在NG-CONF演示过程中涉及此方法的某些好处。由于Web API支持ASP.NET身份,因此身份验证和授权在MVC和Web API之间无缝起作用。

总结主要的利弊:

PROS:

  1. 非常容易实施。
  2. 在MVC和Web API上工作。
  3. 客户端代码无需关注身份验证代码。
  4. 在登录过程中,将UserContext Angular Service设置在服务器端,使用Angular DI轻松共享整个水疗中心。请参阅上述内容。
  5. 与任何普通MVC应用程序一样轻松地与外部提供商集成。

cons:

  1. 由于浏览器未将URL的哈希#部分发送到服务器,因此登录时的返回URL将始终是您的水疗中心的根。例如。假设您的spa root是/app,并且您尝试访问/app#/client时未经认证,您将被重定向到登录页面,但是返回URL将为/app and/app/app#/client服务器无法知道URL的哈希部分,因为浏览器永远不会发送此信息。
  2. 如果您打算在水疗中心以外提供网络API,则不真正支持设计。想象一个游戏机应用程序试图连接到您的API?

因此,简而言之,我们用来引导我们的水疗中心的MVC视图和我们的Web API方法保护了我们的水疗中心。在MVC视图中,我们还使用Razor初始化UserContext Angular Service,以注入我们要公开的任何用户属性。一旦通过单个剃须刀视图加载了水疗

我们已经使用了Beyers之前所描述的内容,并且对大多数应用程序效果很好,我经常使用它。

在我们当前的申请中,我们正在努力以这样的前提,即关注的分离应适用于路线管理。

普通生命周期:

  1. 用户访问www.server.com
  2. 服务器发送index.html
  3. 客户要求缩小资产(.js,.css。等)
  4. 角载荷 - 指令从身体上删除加载类(显示登录部分)
    1. Angular Loginctrl进行了自动素尝试。(在角度服务中登录和自动素)。
    2. 服务器返回http 401
  5. 登录屏幕保持可见。
  6. 用户成功登录(服务器为浏览器提供了一个authtoken cookie; Angular不知道或关心)
  7. Angular设置Bodyctrl和Loginctrl中的一些等法变量
  8. 登录部分接收一类。隐藏和内容会收回一类。可见的(插入ng-hide/show for Fun)
  9. 用户开始填写表格,但接近相对的义务,30分钟的电话。
  10. 服务器已于10分钟前到期
  11. 用户完成并提交表单,但服务器返回未经授权(401)
  12. http-auth-Interceptor从服务器中拦截401,缓存提交呼叫,并发布"登录要求"事件。
  13. bodyctrl聆听并设置iSauthenticated = false,然后ng级和ng-show/hide在登录和内容部分上进行工作。
  14. 用户重新签名和"登录确认"事件已发布
  15. http-auth-auth-Interceptor帖子缓存呼叫。
  16. 用户很高兴
  17. (内容部分也可以显示一些公众视图,因为我们的REST API具有公开的一些路线 - 显示公众视图是通过类似于Isauthenticated的简单函数来处理的)

Angular Ctrl结构:

index.html

<body>
    <!-- I am a fullscreen login element, z-index=2000-->
    <div data-ng-controller="LoginCtrl" data-ng-hide="isAuthenticated()"</div>
    <div data-ng-controller="ContentCtrl">
        <!-- fullscreen class has a z-index=2001 -->
        <section data-ng-view data-ng-class="{fullscreen: isViewPublic()}"></section>
        <!-- header and nav go here -->
    </div>
</body>

我们可以在展示公众的观点/路线方面具有更有创意的创造力,但您可以理解这个想法。我们只有几条公共路线,它们主要用于注册,密码重置等。

免责声明:我尚未与OAUTH/OAUTH/外部身份验证服务集成。希望这种设置仍然可以容纳水。

欢迎对此过程的任何批评。

我绝不熟悉Microsoft后端,但我仍然会尝试一下;-):

关于如何在基于角度的水疗中进行身份验证/授权的良好资源:

  • https://github.com/fnakstad/angular-client-side-auth
    实时演示:http://angular-client-side-auth.herokuapp.com/login

    • 按照您的要求,有两种认证方法:
      • 自己的个人资料
      • 外部提供商。
        它重定向到提供商网站: -/
    • 后端上的nodejs
  • 良好的ng-conf讨论如何在 google doubleclick manager 应用程序中完成授权:http://www.youtube.com/watch?v=62rvrqumvyg&t = 2m29s>这不是您想要的(身份验证),但是解决方案开始在身份验证阶段开始。此外,以后可能会有用,而Ido的方法似乎真的很合理。
    幻灯片:https://docs.google.com/file/d/0b4f6csor-s1cnthqekp4nuzcsmc/edit

  • 最后但并非最不重要的一点:使用AngularJS掌握Web应用程序开发。
    PawełKozłowski和Pete Bacon Darwin的一本精彩的角书。
    它有一两章致力于认证。它显示了一些复杂的解决方案,例如重试和会话预期的拦截器。但是,即使您不会直接使用本书中的方法,这些章节仍然是必读的,因为它们可能会为您提供设计自己的认证解决方案的灵感。

    备注-http-auth-interceptor如书中所述,securityInterceptor解决方案最初是由Witold Szczerba发明的。请参阅博客文章。
    @Corysilva提到的http-auth-interceptor代码实际上是帖子中解释的概念的示例代码。

    btw:这两个章节很棒,但我希望社区将来提出一些更轻松的解决方案。每当我阅读此拦截器promise api的代码时,我都会感到严重头痛:)

    btw2:如果某人不认为自己是角度专家,那么整本书绝对是必读的,并且在阅读指南后必读和很好的补充

对于使用ASP构建登录页面 - 我建议仅将ASP用作后端和中间件,并用Angular绘制全部应用程序。
您可以从进近开始,然后切换到纯角式水疗中心,如果它开始需要越来越疯狂的骇客才能使技术可以很好地播放。
但是我可能错了,这种特殊情况不需要应用任何黑客。

最新更新