У меня есть пользовательский грант-валидатор, который используется для перевода токенов.Ссылочный токен на JWT.
public class ExchangeReferenceTokenGrantValidator : IExtensionGrantValidator
{
private readonly ITokenValidator _validator;
public ExchangeReferenceTokenGrantValidator(ITokenValidator validator)
{
_validator = validator;
}
public async Task ValidateAsync(ExtensionGrantValidationContext context)
{
var referenceToken = context.Request.Raw.Get("token");
if (referenceToken == null)
{
context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, "Missing Reference Token");
return;
}
var token = await _validator.ValidateAccessTokenAsync(referenceToken);
if (token == null || token.IsError)
{
context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, "Invalid Reference Token");
return;
}
var subjectId = token.Claims.FirstOrDefault(x => x.Type == "sub");
// Generate the JWT as if it was for the reference token's client
context.Request.Client = token.Client;
context.Request.Client.AccessTokenType = AccessTokenType.Jwt;
context.Request.Client.AlwaysSendClientClaims = true;
context.Request.Client.AccessTokenLifetime = 1800;
context.Result = new GrantValidationResult(subjectId.Value, GrantType);
}
public string GrantType => "exchange_reference_token";
}
Однако при первом вызове этой конечной точки возвращается эталонный токен, что кажется странным, поскольку я установил AccessTokenType в JWT.Во второй раз, когда я вызываю конечную точку, генерируется JWT.Что мне здесь не хватает?Почему ответ отличается?Я всегда должен получить JWT.