簡體   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