如何获取新的刷新令牌 - Identity Server 4
How to get new refresh token - Identity Server 4
我目前正在制作一个 WPF 应用程序并使用 Identity Server 4 进行身份验证。现在我已经全部正常工作,以便用户在旧令牌过期时使用刷新令牌获得新令牌:
//request new token
using (var newAccessTokenClient = new HttpClient())
{
var newAccessTokenResponse = await newAccessTokenClient.RequestRefreshTokenAsync(new RefreshTokenRequest
{
Address = App.Current.Properties["IdentityServerAPIAddress"].ToString() + "connect/token",
ClientId = "wpf",
ClientSecret = "secret",
GrantType = "refresh_token",
Scope = "openid offline_access WebAPI",
RefreshToken = ReadRefreshToken()
});
if (newAccessTokenResponse.IsError)
{
throw new Exception(newAccessTokenResponse.Exception.ToString());
}
else
{
//refresh token was success, write new tokens
WriteTokens(newAccessTokenResponse.AccessToken, newAccessTokenResponse.RefreshToken);
App.Current.Properties["AccessToken"] = newAccessTokenResponse.AccessToken;
}
}
问题是每当它第二次发生时,Identity Server 4 API 会抱怨刷新令牌已被使用。我如何获得新的刷新令牌?
我看过这个关于我可以实现的接口的文档,但我不知道如何使用它。
感谢任何帮助。谢谢
当您使用刷新令牌请求新的访问令牌时,您应该在同一响应中取回新的刷新令牌。请检查 Fiddler 中的请求。
您还可以使用此客户端设置控制 IdentityServer 如何处理刷新令牌:
RefreshTokenUsage = TokenUsage.OneTimeOnly,
我目前正在制作一个 WPF 应用程序并使用 Identity Server 4 进行身份验证。现在我已经全部正常工作,以便用户在旧令牌过期时使用刷新令牌获得新令牌:
//request new token
using (var newAccessTokenClient = new HttpClient())
{
var newAccessTokenResponse = await newAccessTokenClient.RequestRefreshTokenAsync(new RefreshTokenRequest
{
Address = App.Current.Properties["IdentityServerAPIAddress"].ToString() + "connect/token",
ClientId = "wpf",
ClientSecret = "secret",
GrantType = "refresh_token",
Scope = "openid offline_access WebAPI",
RefreshToken = ReadRefreshToken()
});
if (newAccessTokenResponse.IsError)
{
throw new Exception(newAccessTokenResponse.Exception.ToString());
}
else
{
//refresh token was success, write new tokens
WriteTokens(newAccessTokenResponse.AccessToken, newAccessTokenResponse.RefreshToken);
App.Current.Properties["AccessToken"] = newAccessTokenResponse.AccessToken;
}
}
问题是每当它第二次发生时,Identity Server 4 API 会抱怨刷新令牌已被使用。我如何获得新的刷新令牌?
我看过这个关于我可以实现的接口的文档,但我不知道如何使用它。
感谢任何帮助。谢谢
当您使用刷新令牌请求新的访问令牌时,您应该在同一响应中取回新的刷新令牌。请检查 Fiddler 中的请求。
您还可以使用此客户端设置控制 IdentityServer 如何处理刷新令牌:
RefreshTokenUsage = TokenUsage.OneTimeOnly,