Я пытаюсь обновить токены, но у меня возникают некоторые проблемы с IdentityServer4.
Ниже приведен мой код.
private async Task<string> RenewTokens()
{
/// get the current HttpContext to access the tokens
HttpContext httpContext = _httpContextAccessor.HttpContext;
DiscoveryResponse discoveryResponse = await _httpClient.GetDiscoveryDocumentAsync(Constants.IDP_URL);
/// refresh the tokens
TokenResponse tokenResponse = await _httpClient.RequestRefreshTokenAsync(new RefreshTokenRequest
{
Address = discoveryResponse.TokenEndpoint,
ClientSecret = Credentials.CLIENT_SECRET,
ClientId = Credentials.CLIENT_ID,
RefreshToken = "refreshed",
});
if (!tokenResponse.IsError)
{
List<AuthenticationToken> updatedTokens = new List<AuthenticationToken>
{
new AuthenticationToken
{
Name = OpenIdConnectParameterNames.IdToken,
Value = tokenResponse.IdentityToken
},
new AuthenticationToken
{
Name = OpenIdConnectParameterNames.AccessToken,
Value = tokenResponse.AccessToken
},
new AuthenticationToken
{
Name = OpenIdConnectParameterNames.RefreshToken,
Value = tokenResponse.RefreshToken
}
};
DateTime expiresAt = DateTime.UtcNow + TimeSpan.FromSeconds(tokenResponse.ExpiresIn);
updatedTokens.Add(new AuthenticationToken
{
Name = "expires_at",
Value = expiresAt.ToString("o", CultureInfo.InvariantCulture)
});
/// get authenticate result containing the current principal and properties
AuthenticateResult authenticationResult = await httpContext.AuthenticateAsync("cookies");
authenticationResult.Properties.StoreTokens(updatedTokens);
await httpContext.SignInAsync("cookies", authenticationResult.Principal, authenticationResult.Properties);
/// return the new access token
return tokenResponse.AccessToken;
}
return string.Empty;
}
Как только я нажимаю RequestRefreshTokenAsync, следующее:результат.
System.ArgumentException: параметр обязателен (параметр refresh_token ') в словаре IdentityModel.Internal.DictionaryExtensions.AddRequired (IDictionary`2, ключ String, значение String, логическое allowEmpty) в IdentityModel.Client.HttpClientTokenRequestExtensions.RequestRefreshTokenAsync (клиент HttpMessageInvoker, запрос RefreshTokenRequest, CancellationToken cancellationToken)
Я пытался добавить в объект RefreshTokenRequest * 101 *
удача *1014* * 1012не удается указать, что «grant_type» является дублирующим ключом.
Мое последнее обновление
TokenResponse tokenResponse = await _httpClient.RequestRefreshTokenAsync(new RefreshTokenRequest
{
Address = discoveryResponse.TokenEndpoint,
ClientSecret = Credentials.CLIENT_SECRET,
ClientId = Credentials.CLIENT_ID,
RefreshToken = "refreshed"
});
, но tokenResponse недействителен
{"error": "invalid_grant"}
и настройка
GrantType = "refresh_token"
все еще не повезло.
Чего мне не хватает?
https://readthedocs.org/projects/identitymodel/downloads/pdf/latest/