Здравствуйте, делаю авторизацию через Есиа с помощью OAuth2/OpenIdConnect, и основная задача - получение данных о пользователе, была выполнена, но когда встал вопрос о обновлении access_token'а без повторной аутентификации, то я обнаружил, что refresh_token мне не приходит, в документации на этот счёт сказано лишь то, что нужно указать в параметрах запроса access_type: "offline", что я и сделал, но результата нет. Сталкивался кто с такой же проблемой? Прикрепляю код запроса, то как он выглядит перед отправкой и ответ от сервера
public static async Task OnAuthorizationCodeReceivedHandler(AuthorizationCodeReceivedContext ctx, string clientCertificateHash, Func<AuthorizationCodeReceivedContext, Task> userHandler)
{
ILogger logger = ctx.HttpContext.RequestServices.GetService<ILogger<EsiaOpenIdConnectHandler>>();
logger.LogInformation($"Зашли в OnAuthorizationCodeReceivedHandler");
Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectMessage request = ctx.TokenEndpointRequest;
string authorizationCode = request.Code;
string clientId = request.ClientId;
string scope = string.Join(" ", ctx.Options.Scope);
DateTimeOffset now = DateTimeOffset.Now;
string timestamp = now.ToString("yyyy.MM.dd HH:mm:ss") + " " + now.ToString("zzz").Replace(":", string.Empty);
string state = Guid.NewGuid().ToString();
string redirectUrl = $"https://{ctx.Request.Host}{ctx.Request.PathBase}{ctx.Options.CallbackPath}";
string msgBase64 = Base64UrlEncoder.Encode($"{clientId}{scope}{timestamp}{state}{redirectUrl}{authorizationCode}");
string clientSecret = await EsiaExtensions.Sign(ctx.Options.Backchannel, msgBase64).ConfigureAwait(false);
_cacheState.Add(state, ctx.Options.StateDataFormat.Protect(ctx.Properties));
request.ClientSecret = clientSecret;
request.Scope = scope;
request.Parameters.Add("timestamp", timestamp);
request.Parameters.Add("state", state);
request.RedirectUri = redirectUrl;
request.Parameters.Add("client_certificate_hash", clientCertificateHash);
request.GrantType = "authorization_code";
request.TokenType = "Bearer";
request.Parameters.Add("access_type", "offline");
logger.LogInformation("TokenEndpointRequest, детали: {@RequestInfo}", request);
logger.LogInformation("Редирект на ЕСИА, для получения токена, детали: {@RedirectInfo}", new
{
Scheme = ctx.Request.Scheme,
Host = ctx.Request.Host,
PathBase = ctx.Request.PathBase,
Path = ctx.Request.Path,
CallbackPath = ctx.Options.CallbackPath,
AuthorizationCode = authorizationCode,
FormedRedirectUrl = redirectUrl,
});
await userHandler(ctx);
}