是否可以在 oidc 客户端中设置 RefreshTokenUsage?
Is there a possibility to set RefreshTokenUsage in oidc client?
我的令牌有问题。当我们启动我们的程序时,应该检查缓存中的有效令牌。这是第一次有效,但之后 refreshToken.isError 始终为真,即使令牌尚未过期也是如此。
我找到了此页面 https://identityserver4.readthedocs.io/en/latest/topics/refresh_tokens.html,但我找不到设置 RefreshTokenUsage 的方法。如果有人知道如何解决这个问题,那将非常有帮助。
方法如下:
private async Task<string?> TryGetTokenFromCache()
{
StatusChangeEvent?.InvokeRetrievingTokenFromCache();
var existingToken = _dataProtection.Unprotect(_cacheFilePath);
if (existingToken != null)
{
var token = System.Text.Encoding.Default.GetString(existingToken);
if (!string.IsNullOrEmpty(token))
{
var refreshTokenResult = await _client.RefreshTokenAsync(token);
if (!refreshTokenResult.IsError)
{
StatusChangeEvent?.InvokeLoggedIn();
return refreshTokenResult.AccessToken;
}
}
}
return null;
}
解决方法:
我们没有在缓存文件中设置新的刷新令牌。
当结果没有错误时,我们只需要将新的 refreshtoken 写入缓存文件。
我的令牌有问题。当我们启动我们的程序时,应该检查缓存中的有效令牌。这是第一次有效,但之后 refreshToken.isError 始终为真,即使令牌尚未过期也是如此。 我找到了此页面 https://identityserver4.readthedocs.io/en/latest/topics/refresh_tokens.html,但我找不到设置 RefreshTokenUsage 的方法。如果有人知道如何解决这个问题,那将非常有帮助。
方法如下:
private async Task<string?> TryGetTokenFromCache()
{
StatusChangeEvent?.InvokeRetrievingTokenFromCache();
var existingToken = _dataProtection.Unprotect(_cacheFilePath);
if (existingToken != null)
{
var token = System.Text.Encoding.Default.GetString(existingToken);
if (!string.IsNullOrEmpty(token))
{
var refreshTokenResult = await _client.RefreshTokenAsync(token);
if (!refreshTokenResult.IsError)
{
StatusChangeEvent?.InvokeLoggedIn();
return refreshTokenResult.AccessToken;
}
}
}
return null;
}
解决方法: 我们没有在缓存文件中设置新的刷新令牌。 当结果没有错误时,我们只需要将新的 refreshtoken 写入缓存文件。