IdentiyServer4 GrantValidationResult отличается в ответ - PullRequest
0 голосов
/ 29 октября 2018

У меня есть пользовательский грант-валидатор, который используется для перевода токенов.Ссылочный токен на 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.

...