【问题标题】:Web API 2, token authentication and authorizationWeb API 2,令牌认证和授权
【发布时间】:2019-01-09 03:31:23
【问题描述】:

即使我设置了我的用户不在的组,我的带有令牌身份验证的 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】:

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

    您的端点将如下所示:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2014-07-02
      • 1970-01-01
      • 2023-03-23
      • 2014-09-19
      相关资源
      最近更新 更多