繁体   English   中英

identityserver4 中的委托令牌

[英]Delegation token in identityserver4

我有这个客户端流程: 1.client1 调用 api1 2.api1 调用 api2

我需要来自客户端的身份 1 将传递给 api2 我使用 IExtensionGrantValidator 实现了 DelegationTokenGrantValidator

我使用发送了原始的 client1 令牌
参数 = 新字典 { { "token", token } }

我遵循了本指南: http : //docs.identityserver.io/en/latest/topics/extension_grants.html#example-simple-delegation-using-an-extension-grant

我能够在 api1 中生成令牌并调用 api2 但身份是 api1 而不是 client1

您需要在自定义授权的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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM