Web API 2,令牌认证和授权
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web API 2,令牌认证和授权相关的知识,希望对你有一定的参考价值。
如果我设置了我的用户不在的组,那么带有令牌认证的Web API 2服务总是可以工作。如何设置基于角色的授权?
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DOMAIN"))
{
bool isValid = pc.ValidateCredentials(context.UserName, context.Password);
if (!isValid)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return Task.FromResult<object>(null);
}
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Role, "NotValidGroup"));
context.Validated(identity);
return Task.FromResult<object>(null);
}
**[Authorize]**
public IHttpActionResult Get(string p)
{
return Ok(GetData(p));
}
答案
将它传递给令牌的方式是正确的,您只需将它们添加到Authorize属性即可。
您的端点将如下所示:
[Authorize(Roles = "ValidGroup")]
public IHttpActionResult Get(string p)
{
return Ok(GetData(p));
}
如果您没有指定要访问该资源的角色(可以是多个,只需用逗号分隔),那么经过身份验证的每个人都有权访问,在您指定要访问该角色的角色之后特定端点,只有具有这些角色的用户才能访问该端点。
您也可以在控制器级别执行此操作,只需在控制器之前使用[Authorize(Roles = "ValidGroup")]
。
以上是关于Web API 2,令牌认证和授权的主要内容,如果未能解决你的问题,请参考以下文章