[英]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.