Identity Server4使用客户端凭据进行内省身份验证

时间:2018-02-28 20:17:55

标签: identityserver4

我对MVC / Webforms场景中引用tokens和内省端点的用例感到有些困惑。

我的基本问题是为什么内省端点只设置为允许来自ApiResource凭证(api1 / apisecret)的身份验证请求而不允许客户端凭据?我可以使用ApiResource凭据下面的代码,我只是未经授权使用客户端凭据。我认为这是按照设计的。

我想让我们的系统管理员能够撤销令牌并强制注销用户。我的计划是使用CookieAuthenticationProvider的OnValidateIdentity定期验证引用令牌,并在需要时强制注销。我认为我可以使用短暂的自包含JWT令牌和刷新令牌获得类似的功能,但是喜欢使用引用令牌的简单性。我显然可以在同一个应用程序中使用两组凭据,一个用于客户端,一个用于ApiResource,但接口更直观,可以使用/管理一组凭据,即客户端。我不应该为服务器端可信应用程序使用引用标记吗?

我的客户端设置如下。


    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
    AccessTokenType = AccessTokenType.Reference,

以下是我的研究中的一些注释。

以下是关于Introspection Endpoint的文档 - http://docs.identityserver.io/en/release/endpoints/introspection.html

以下是Dominick Baier关于参考标记的帖子 - https://leastprivilege.com/2015/11/25/reference-tokens-and-introspection/

以下是我正在使用的IntrospectionClient调用的示例。 https://github.com/IdentityServer/IdentityServer4.Samples/blob/release/Clients/src/ConsoleIntrospectionClient/Program.cs

以下是内省的规范,您可以看到它并未指出所需的身份验证类型。 - https://tools.ietf.org/html/rfc7662

  

为防止令牌扫描攻击,端点也必须要求   访问此端点的某种形式的授权,例如客户端
  OAuth 2.0 [RFC6749]中描述的身份验证或单独的   OAuth 2.0访问令牌,例如OAuth中描述的承载令牌      2.0承载令牌使用[RFC6750]。管理和验证这些身份验证凭据的方法超出了本协议的范围   说明书

这是带有秘密的ApiResource示例。


           // simple version with ctor
            new ApiResource("api1", "Some API 1")
            {
                // this is needed for introspection when using reference tokens
                ApiSecrets = { new Secret("apisecret".Sha256()) }
            },

以下是ConsoleIntrospectionClient客户端的示例客户端。


    new Client
                {
                    ClientId = "roclient.reference",
                    ClientSecrets = 
                    {
                        new Secret("secret".Sha256())
                    },

                    AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
                    AllowedScopes = { "api1", "api2.read_only" },

                    AccessTokenType = AccessTokenType.Reference
                },

    

0 个答案:

没有答案