【问题标题】:Returning User Roles to an AngularJS app from ASP.NET Identity using OAuth and bearer tokens使用 OAuth 和不记名令牌从 ASP.NET 身份将用户角色返回到 AngularJS 应用程序
【发布时间】:2014-02-08 04:25:36
【问题描述】:

我正在实现一个 AngularJS SPA,其后端实现为从 Visual Studio 2013 模板生成的 WebAPI。 AngularJS 做了所有事情,包括登录,我已经成功地将它提交到 //localhost/token 并收到了一个我添加到后续请求标头中的令牌。但是,我现在想根据用户角色决定要渲染的 AngularJS 模板,因此我需要客户端的角色(我按角色保护我的所有服务器代码,因此做出这些决定客户端很好。)

为此,我正在考虑添加一些类似的内容...

foreach (var claim in context.Identity.Claims.Where(c => c.Type.EndsWith("/role")))
{
    context.AdditionalResponseParameters.Add("role", claim.Value);
}

... 添加到 ApplicationOAuthProvider.TokenEndpoint() 方法中,以便将角色添加到 JSON 中,并在获取令牌时返回给 AngularJS 代码。

我意识到上面的代码目前不适用于多个角色,但我更想知道这是否是访问角色信息的正确方法以及我是否以正确的方式添加它?

【问题讨论】:

    标签: security angularjs asp.net-identity


    【解决方案1】:

    ng-conf 发生在几天前,提出了一个经过深思熟虑的解决方案。这是video 的链接。他谈论授权大约 10 分钟。

    基本上,它涉及为您的应用提供一个 activeUser 服务,然后根据该服务中描述的功能有条件地加载指令。

    至于获得角色...

    var userRoles = await UserManager.GetRolesAsync(User.Identity.GetUserId());
    // or if not async
    var userRoles = UserManager.GetRoles(User.Identity.GetUserId());
    

    更新

    既然你的结论,我可能会建议这样的事情:

    -link-

    它基本上是在 ng-conf 中谈到的解决方案,但它是在 web-api 控制器中呈现的。完全放弃对 MVC 的需求。

    模型包含什么,甚至 index.cshtml 呈现什么取决于您用于确定用户是否经过身份验证和授权的逻辑。

    【讨论】:

    • 谢谢。我喜欢在 ng-conf 上提出的想法。这让我想知道如何推进我的应用程序。我也使用了一个带有 WebAPI 的 ASP.NET MVC 模板,但删除了 MVC 登录页面,给我留​​下了一些交付静态 AngularJS 内容的东西。我想我现在可以选择返回 MVC 登录页面或在 AngularJS 之后执行 window.location 更改,以便使用 Active Profile 重建 index.HTML。我更喜欢后者。
    • 这可行,但保留 MVC 可能不值得。我用不同的解决方案更新了我的答案
    猜你喜欢
    • 2014-07-28
    • 2019-12-30
    • 2015-11-03
    • 2023-03-14
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多