gpt4 book ai didi

asp.net-core - 扩展授权 - 授权类型委托(delegate)无效 - Identity Server 4 .NET Core 2.2

转载 作者:行者123 更新时间:2023-12-04 15:39:37 26 4
gpt4 key购买 nike

我正在尝试按照来自 HERE 的教程,弄清楚如何结合 client credentials 实现 delegation 授权类型。 ,实际上是一页,因为我有 API1 资源调用另一个 API2 资源。

我已经实现了 IExtensionGrantValidator 并使用他们提供的类名从文档中复制了代码,并添加了授权类型为 delegation client。但是,我不确定下面在哪里以及如何调用此方法,起初我是从 client 调用它并尝试将我最初调用 API1 的 JWT 传递给 DelegateAsync 方法,但我一直收到一个错误的请求

在 API 1 中,您现在可以自己构造 HTTP 负载,或使用 IdentityModel 帮助程序库:

    public async Task<TokenResponse> DelegateAsync(string userToken)
{
var payload = new
{
token = userToken
};

// create token client
var client = new TokenClient(disco.TokenEndpoint, "api1.client", "secret");

// send custom grant to token endpoint, return response
return await client.RequestCustomGrantAsync("delegation", "api2", payload);
}

因此,我尝试从 API1 请求一个名为 GetAPI2Response 的方法中的 token ,该方法试图调用 API2 中的一个方法:

        [HttpGet]
[Route("getapi2response")]
public async Task<string> GetApi2Response()
{
var client = new HttpClient();

var tokenResponse = await client.RequestTokenAsync(new TokenRequest
{
Address = "http://localhost:5005/connect/token",
GrantType = "delegation",
ClientId = "api1_client",
ClientSecret = "74c4148e-70f4-4fd9-b444-03002b177937",

Parameters = { { "scope", "stateapi" } }
});

var apiClient = new HttpClient();
apiClient.SetBearerToken(tokenResponse.AccessToken);

var response = await apiClient.GetAsync("http://localhost:6050/api/values");

if (!response.IsSuccessStatusCode)
{
Debug.WriteLine(response.StatusCode);
}
else
{
var content = await response.Content.ReadAsStringAsync();

return content;
}
return "failed";
}

但是,当调试一个无效的授权类型时返回。奇怪的是,我注意到在运行 IDSRV 时,IExtensionGrantValidator 方法中的代码没有被命中,直到您单击 discovery docs 的链接然后它显示为 grant输入

我显然做错了什么,因为我没有包括前面提到的文档中的 DelegateAsync 方法,因为我不清楚它的去向。

最佳答案

文档似乎有点过时了。对于实际的扩展方法,必须有类似的东西:

var tokenResponse = await client.RequestTokenAsync(new TokenRequest
{
Address = "http://localhost:5005/connect/token",
GrantType = "delegation",
ClientId = "api1_client",
ClientSecret = "74c4148e-70f4-4fd9-b444-03002b177937",
Parameters = new Dictionary<string, string>{{ "token", userToken }, { "scope", "stateapi" } }
})

您已经实现了它,但忘记添加初始 token 。当您从 GetApi2Response() 中提取它时,它可以成为您的 DelegateAsync

然后您在 Identityserver 中的客户端配置必须包含 api1_clientdelegation GrantType。也不要忘记注册:

services.AddIdentityServer().AddExtensionGrantValidator<YourIExtensionGrantValidatorImpl>()

关于asp.net-core - 扩展授权 - 授权类型委托(delegate)无效 - Identity Server 4 .NET Core 2.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58318539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com