使用IdentityServer4中的offline_access范围对令牌进行自省

时间:2019-05-25 08:14:10

标签: .net identityserver4 openid-connect

使用自己定义的范围时,我设法自省了访问令牌。我只需要使用基本授权就可以发布到端点,其中用户名是我的作用域名称,密码是我的作用域api秘密。但是offline_access是IdentityServer定义的默认范围,我如何对其进行自省?有什么方法可以使用api秘密自定义offline_access范围?我需要使用offline_access,因为只有该示波器才能为我提供刷新令牌。

2 个答案:

答案 0 :(得分:0)

您可以创建一个这样的刷新令牌。

创建您的声明。

var issuer = HttpContext.GetIdentityServerIssuerUri();

                var tokenObj = new Token
                {
                    Issuer = issuer,
                    CreationTime = DateTime.UtcNow,
                    Lifetime = client.AccessTokenLifetime,
                    ClientId = "9a7519a1e0224b18bb28d0fe0a00d038",
                    Claims = claims,
                    AccessTokenType = AccessTokenType.Reference,
                };

var client = _clientStore.FindClientByIdAsync("{clientId}").Result;

var refereshToken = _refreshTokenService.CreateRefreshTokenAsync(claimsPrincipal, tokenObj, client).Result;

IRefreshTokenService _refreshTokenService; IClientStore _clientStore;

这两个都注入到构造函数中。

答案 1 :(得分:0)

我找到了一种自省offline_access作用域令牌的方法。我希望这可以帮助像我这样坚持的人。让我说我的代码

    public static IEnumerable<ApiResource> GetApis()
    {
        return new List<ApiResource>
        {
            new ApiResource("api1", "My API")
            {
                ApiSecrets = { new Secret("secret".Sha256()) }
            }
        };
    }

我的客户代码是

    public static IEnumerable<Client> GetClients()
    {
        return new List<Client>
        {
            // resource owner password grant client
            new Client
            {
                ClientId = "ro.client",
                AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,

                ClientSecrets =
                {
                    new Secret("secret".Sha256())
                },
                AllowedScopes = new List<string>
                {
                    "api1",
                   IdentityServerConstants.StandardScopes.OfflineAccess,
                },
                AllowOfflineAccess = true,
                AccessTokenType = AccessTokenType.Reference, // revocation endpoint work with reference access token only
            }
        };
    }

请求访问令牌时,请同时包含api1和offline_access, http://localhost:5000/connect/token

在请求刷新令牌时, http://localhost:5000/connect/token

进行内省时,请注意,基本授权期间将使用用户名api1和密码secret http://localhost:5000/connect/introspect

在撤销参考令牌或刷新令牌时,请注意,基本授权期间将使用用户名ro.client和密码secret, http://localhost:5000/connect/revocation

http://localhost:5000/connect/revocation