2014-01-18 16 views
6

我正在实施AngularJS SPA,后端实现为从Visual Studio 2013模板中接种的WebAPI。 AngularJS做了所有事情,包括登录,我已经成功地将它提交给// localhost/token,并且收回了一个我添加到后续请求头中的令牌。但是,我现在想根据用户角色决定要渲染哪些AngularJS模板,因此我需要角色(客户端)(我按角色保护我的所有服务器代码,以便做出这些决定客户端是好的。)使用OAuth和持票人令牌将用户角色从ASP.NET身份返回到AngularJS应用程序

为此我正在考虑加入沿此线的东西的...

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

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

我意识到上面的代码现在不适用于更多的一个角色,但我更感兴趣知道这是否是访问角色信息的正确方式,以及我是否以正确的方式添加它?

回答

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的呈现取决于用于确定用户是否经过身份验证和授权的任何逻辑。

+0

谢谢。我喜欢在ng-conf上提出的想法。这让我想知道如何让我的应用前进。我也使用了WebAPI的ASP.NET MVC模板,但是剥去了MVC登录页面,给我留​​下了一些提供静态AngularJS内容的东西。我想我现在可以选择回到MVC登录页面或在AngularJS之后执行window.location更改,以便使用Active Profile重建index.HTML。我更喜欢后者。 – Phil

+0

这会起作用,但它可能不值得保留MVC。我已经用不同的解决方案更新了我的答案 – calebboyd

相关问题