Токен делегирования в identityserver4 - PullRequest
0 голосов
/ 13 января 2020

У меня есть этот клиентский поток: 1.client1, вызывающий api1 2.api1, вызывающий api2

Мне нужен идентификатор от клиента 1, передается в api2. Я реализовал DelegationTokenGrantValidator, используя IExtensionGrantValidator

Я отправил исходный токен client1 с использованием
Parameters = new Dictionary {{"token", token}}

Я следовал этому руководству: http://docs.identityserver.io/en/latest/topics/extension_grants.html#example -простое делегирование-использование-расширение-гранта

Я смог сгенерировать токен в api1 и вызвать api2, но идентификатором является api1, а не client1

1 Ответ

0 голосов
/ 14 января 2020

Вам необходимо передать идентификационные данные в вашем ValidateAsync методе вашего специального гранта:

public async Task ValidateAsync(ExtensionGrantValidationContext context)
{
    var userToken = context.Request.Raw.Get("token");

    if (string.IsNullOrEmpty(userToken))
    {
    context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);
    return;
    }

    var result = await _validator.ValidateAccessTokenAsync(userToken);
    if (result.IsError)
    {
        context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);
        return;
    }

    var sub = result.Claims.FirstOrDefault(c => c.Type == JwtClaimTypes.Subject)?.Value;
    var username = result.Claims.FirstOrDefault(c => c.Type == JwtClaimTypes.Name)?.Value;
    var other = result.Claims.FirstOrDefault(c => c.Type == "other")?.Value;
    // ...

    var claims = new List<Claim>();
    claims.Add(new Claim(JwtClaimTypes.Subject, sub));
    claims.Add(new Claim(JwtClaimTypes.Subject, username));
    claims.Add(new Claim(JwtClaimTypes.Subject, other));
    // ...

    context.Result = new GrantValidationResult(subject: sub, authenticationMethod: GrantType, claims: claims);
    return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...