【发布时间】:2014-07-07 05:44:02
【问题描述】:
我有一个AngularJS 客户端应用程序,它使用javascript(不是coffeescript 或typescript)Oauth2 使用最新的Identity 2 对WebAPI 2 应用程序进行身份验证。我的应用程序中的所有软件都是最新的,并且基于this example。我的客户端浏览器目标是 IE9 及以上。
请注意,我对上面的示例做了一些小的更改,因为我没有使用转换对发送到服务器的所有数据进行 urlencode。相反,我只在下面的身份验证方法中进行 urlencode:
user.authenticate = function (userName, password, rememberMe, successCallback, errorCallback) {
var config = {
method: 'POST',
url: '/Token',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: 'grant_type=password&username=' + encodeURIComponent(userName) + '&password=' + encodeURIComponent(password),
};
我正在使用 VS2013 Update 2 进行开发,在服务器上,我使用 C#、最新的实体框架和 SQL Server 2012。
要登录,我的客户端调用 WebAPI 的 /Token 方法并传递用户 ID 和密码。 WebAPI 然后用一个令牌响应我存储的客户端。对于 WebAPI 的每个请求,都会发回令牌并进行身份验证:
$http.defaults.headers.common.Authorization = 'Bearer ' + user.data.bearerToken;
到目前为止,这工作得很好,但就目前而言,应用程序无法区分分配给他们不同角色的用户之间的区别。
某些 WebAPI 方法只能由具有特定角色的用户执行。我想调整我的前端 AngularJS 应用程序的菜单,以便只有当用户具有此角色时,相应的链接才会可见。我确实意识到这不会阻止用户检查 HTML 和发布,但我并不担心这一点,因为我仍然有方法修饰来限制非角色用户执行操作的能力。
谁能给我一个示例,说明如何使用我在问题中提到的上面提到的产品套件以及 JavaScript Web 令牌(如果它们有助于使解决方案保持最新)来做到这一点.据我了解,角色由声明处理,但我不明白如何添加这些并使用令牌将它们发送回客户端。我在互联网上做了很多研究,但我找不到任何好的例子,因为我认为其中大部分都是非常新的,没有多少人有机会探索 SPA 如何使用这些最新的软件组件。
回答此问题时请注意,我不是在寻找可以告诉社区如何在服务器上设置角色的答案,也不是在寻找解释提供角色的重要性的答案检查服务器。我想几乎每个人都知道这一点。我真正认为有用的是一些非常详细的技术建议,带有示例代码和解释。为了保持答案的重点,如果不满足此需求的答案未作为建议答案发布,可能会对每个人都有帮助。
提前谢谢你。
【问题讨论】:
-
您能否详细解释一下“角色由索赔处理”?声明是角色的替代方案,但如果您仍想使用角色,请添加类型为 ClaimTypes.Role 的声明
-
我认为这可能会有所帮助:msdn.microsoft.com/en-us/library/hh545448.aspx
标签: asp.net angularjs oauth asp.net-web-api claims-based-identity