IdentityServer3:根据用户声明拒绝访问给定范围

时间:2017-01-25 13:03:38

标签: asp.net-web-api identityserver3 oauth2

我有一个包含2个区域的WebAPI - 用户和管理员。 2个站点,用户和管理员,使用它,他们有自己的客户端ID。

    public static readonly Scope AdminScope = new Scope
    {
        Name = "adm_api",
        Type = ScopeType.Resource,
        Claims = new List<ScopeClaim>
        {
            new ScopeClaim(Constants.ClaimTypes.Role),
            new ScopeClaim(VitClaimTypes.IsAdmin)
        },
    };

    public static readonly Scope UserScope = new Scope
    {
        Name = "user_api",
        Type = ScopeType.Resource,
        Claims = new List<ScopeClaim>
        {
            new ScopeClaim(Constants.ClaimTypes.Role),
            new ScopeClaim(Constants.ClaimTypes.Name),
        }
    };

客户端:

        new Client
        {
            ClientName = "User area client",
            ClientId = "user_client",
            Enabled = true,

            AllowedScopes = new List<string>
            {
                "user_api", "offline_access"
            }
        },

        new Client
        {
            ClientName = "Admin area client",
            ClientId = "adm_client",
            Enabled = true,

            AllowedScopes = new List<string>
            {
                "user_api", "adm_api"
            }
        },

现在我想拒绝为请求&#39; adm_api&#39;的用户登录范围但没有IsAdmin声明。我怎么做?我知道我可以为API添加自定义Authorize属性,我会这样做。但是,在登录时立即拒绝访问比等待第一次API访问更加用户友好。

1 个答案:

答案 0 :(得分:0)

我认为管理员应负责检查已发布的声明,并在请求api资源之前通知用户访问不足。身份服务拒绝登录是不正确的,毕竟身份验证没有任何问题。这听起来更像授权。