IfT*_*rue 2 asp.net authorization jwt asp.net-web-api auth0
在此事先感谢您的帮助!
我希望有人可以帮我弄清楚如何通过Auth0授权扩展中分配的组来授权API访问.
我目前正在使用web api中的[Authorize]属性 - 它允许api调用,如果他们已成功登录并阻止它,如果没有.
但是,如果我尝试[Authorize(Roles ="myGroupName")]授权失败.如果我在Auth0网站上的用户仪表板中手动将其添加到用户app_metadata而不是通过扩展程序分配,则会出现相同的情况.
我的项目是通过遵循Angular Quick Start和Asp.Net Quick Start来设置的.我验证令牌服务器端的webapiconfig是:
class WebApiConfig
{
public static void Register(HttpConfiguration configuration)
{
var clientID = WebConfigurationManager.AppSettings["auth0:ClientId"];
var clientSecret = WebConfigurationManager.AppSettings["auth0:ClientSecret"];
configuration.MessageHandlers.Add(new JsonWebTokenValidationHandler()
{
Audience = clientID,
SymmetricKey = clientSecret
});
configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });
}
}
Run Code Online (Sandbox Code Playgroud)
该Auth0授权延长目前通过组的概念支持的授权决定.您可以创建组,将用户分配给该组,并将应用程序配置为只能由特定组中的用户访问.所有这些都将自动处理,并且应用程序预期组之外的任何用户都将被拒绝完全访问.
您的用例有点不同,但仍然有效.您希望为生成的令牌发送配置了扩展的组,以便应用程序本身根据这些值做出授权决策.
为了在扩展中配置的组在令牌中发送,您需要做的第一件事就是请求它们.为此,您需要groups
在执行身份验证请求时包括范围.
将用户的组成员身份添加到传出令牌(可以通过OpenID组范围请求);
(重点是我的,来源:授权扩展文档,部分规则行为)
如果您使用该范围请求令牌然后在jwt.io中对其进行解码,您将得到与此类似的内容(实际组因用户而异):
{
"groups": [
"GROUP-1",
"GROUP-2"
],
"iss": "https://[tenant].auth0.com/"
}
Run Code Online (Sandbox Code Playgroud)
现在,在ASP .NET API端验证此信息.假设您正在使用的示例是此示例(ASP.NET Web API),则令牌中包含的组信息将映射到以下声明:
groups
| 值:GROUP-1
groups
| 值:GROUP-2
发生这种情况是因为JsonWebToken
类中存在的逻辑通过创建共享相同类型的每值声明来处理来自JWT有效内容的数组.
最后一部分是确保AuthorizeAttribute
检查这些类型的声明,groups
而不是尝试查找角色声明.您应该能够通过更改类中的RoleClaimType
常量而不是JsonWebToken
使用值来实现此"groups"
目的"http://schemas.microsoft.com/ws/2008/06/identity/claims/role"
.
归档时间: |
|
查看次数: |
2053 次 |
最近记录: |