使用自己定义的范围时,我设法自省了访问令牌。我只需要使用基本授权就可以发布到端点,其中用户名是我的作用域名称,密码是我的作用域api秘密。但是offline_access是IdentityServer定义的默认范围,我如何对其进行自省?有什么方法可以使用api秘密自定义offline_access范围?我需要使用offline_access,因为只有该示波器才能为我提供刷新令牌。
答案 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,
进行内省时,请注意,基本授权期间将使用用户名api1和密码secret