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,令牌认证和授权的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS客户端路由和令牌认证与web api

Web API 更新的令牌认证

Azure AD 身份验证令牌未通过 Web api 授权

Web Api 跨域基础认证

Laravel 通过 Passport 实现 API 请求认证:隐式授权令牌

如何在 MVC 4/Web Api 2 中实现不记名令牌认证