在我的店里,我们有几个使用.NET令牌进行身份验证的OAuth Web。目前,每个web都是授权和资源服务器。用户使用相同的凭据对所有这些API进行身份验证,但他们目前需要独立地对每个API进行身份验证。
我对创建共享授权服务器( la http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/)很感兴趣,但我对索赔转换却束手无策。按照下面的示例,向发出的令牌添加自定义声明(特定于应用程序)对我们非常有用:
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
/* validate credentials here... */
var identity = new ClaimsIdentity("JWT");
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim(ClaimTypes.Role, "Manager"));
identity.AddClaim(new Claim(ClaimTypes.Role, "Supervisor"));
var props = new AuthenticationProperties(new Dictionary<string, string>
{
{
"audience", (context.ClientId == null) ? string.Empty : context.ClientId
}
});
var ticket = new AuthenticationTicket(identity, props);
context.Validated(ticket);
return Task.FromResult<object>(null);
}根据我所看到的,如果我创建了一个通用的授权服务器,那么所有的声明转换都需要在那里进行。这是否意味着资源服务器(我们不同的Web )不能向用户的令牌添加任何自定义声明?我可以添加特定于请求授权服务器上令牌的应用程序的声明吗?或者我是否需要装配一些东西,以便授权服务器根据请求的应用程序添加某些声明?
发布于 2016-02-05 21:39:21
在过去,我有一个身份验证服务器来发出令牌。然后,客户端将身份验证令牌发送到带有表单请求的授权服务器:
“具有此application_id的客户端请求为附加身份验证令牌中定义的用户访问内容X。”
授权服务器进行检查,以确保用户已被授权,并向客户端颁发了新的授权令牌。然后,客户端将此令牌传递给提供内容X的服务。
在本例中,授权服务器确实需要一个配置更新来了解新内容Y。
您可以修改它,以便资源服务器要求授权服务器创建包含附加自定义声明的令牌。
https://softwareengineering.stackexchange.com/questions/263050
复制相似问题