Web API 2,令牌认证和授权

问题描述 投票:0回答:1

如果我设置了我的用户不在的组,那么带有令牌认证的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));
    }
asp.net-web-api2 authorization access-token
1个回答
0
投票

将它传递给令牌的方式是正确的,您只需将它们添加到Authorize属性即可。

您的端点将如下所示:

[Authorize(Roles = "ValidGroup")]
public IHttpActionResult Get(string p)
{
    return Ok(GetData(p));
}

如果您没有指定要访问该资源的角色(可以是多个,只需用逗号分隔),那么经过身份验证的每个人都有权访问,在您指定要访问该角色的角色之后特定端点,只有具有这些角色的用户才能访问该端点。

您也可以在控制器级别执行此操作,只需在控制器之前使用[Authorize(Roles = "ValidGroup")]

© www.soinside.com 2019 - 2024. All rights reserved.