【问题标题】:Angular 2 and Asp.Net 5 mvc 6 - authentication practicesAngular 2 和 Asp.Net 5 mvc 6 - 身份验证实践
【发布时间】:2016-06-07 23:19:56
【问题描述】:

我正在使用 angular 2 和 asp.net 5 mvc 6 创建我的第一个 spa 应用程序。这将是一个使用基于 cookie 的身份验证的简单应用程序。我知道我应该使用令牌,但我不需要将身份验证传递给其他应用程序,所以 cookie 就足够了。 我还决定使用基于权限的授权。数据库架构如下所示:

User ---> Role <----> Permission

当用户未通过身份验证时我的 api 返回代码 401,当他通过身份验证但他无权访问数据时返回代码 403

我已经实现了这部分: schema

但现在我不知道如何处理客户端中的用户凭据和权限,我有一些问题。我只是需要一些指导。

  1. 设置会话后如何在 spa 中存储用户数据?有很多选择。每次我需要用户数据时,我都可以调用 api,例如用户名、电子邮件或者我可以获取一次并存储在加密的 cookie 或 localStorage 中。

  2. 与用户权限相同。由于当前用户权限使用 *ngIf 等指令,我想管理模板中按钮或菜单中的链接等的显示。我还可以将用户权限存储在 localStorage 中,或者每次路由更改时调用 api 来获取 json,例如:

    {  
        showEditButton: true,
        showHeader: false 
    }
    

【问题讨论】:

    标签: asp.net-mvc authentication angular session-cookies


    【解决方案1】:

    我将此信息存储在浏览器的本地存储中。当用户登录时,我将用户信息(用户名)对象保存在本地存储中,并在我从 api 获得未经授权的响应或用户注销时清除它。我建议您使用令牌进行 SPA。 SPA 应该是无状态的。 api 的令牌身份验证不仅适用于外部提供者。

    【讨论】:

    • 谢谢,我考虑过这个选项,但我不确定这是否是最好的方法。一开始,我想创建令牌身份验证,但是我很难为令牌创建授权服务器,而且实际上还没有新版本的 asp.net 的示例,它仍处于测试阶段:/
    • 尝试按照本教程 bitoftech.net/2014/06/01/… 并使用旧的 VS 模板来实现这一点。它是关于旧的 Web Api,但主要功能是相同的。
    • 我看过本教程,但主要问题是我不想使用 Identity,因为它的 db 架构不适合我的 - 基于权限:/
    • 您可以使用身份。尤其是新的 MVC。我使用 Identity 和 Mongo。您应该实现自己的 UserStore。
    【解决方案2】:

    这个项目处理上述所有问题:https://github.com/chsakell/aspnet5-angular2-typescript值得一看。

    【讨论】:

    • 非常感谢。等待一个现成的例子是值得的。我之前在服务器端进行了完全相同的身份验证实现,但我不知道如何将它与 angular spa 连接起来。看起来很棒;)
    • 请注意,在撰写本文时,该项目将您的密码以明文形式存储在本地存储中,这是相当危险的。相反,您通常应该在此处存储一个令牌,并将其与您想要验证的每个请求一起传递。
    猜你喜欢
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2016-07-11
    相关资源
    最近更新 更多