gpt4 book ai didi

azure - 每个 API 的 AAD 访问 token

转载 作者:行者123 更新时间:2023-12-03 06:16:13 25 4
gpt4 key购买 nike

当前行为 -

从我们的服务 A 中,我们正在调用服务 B。我们目前使用 client_credentials 作为为服务 B 生成 access_token 的方式(如下所示)。

enter image description here

服务 B 正在验证在其端生成的 token ,一切正常。

预期行为 -

所以,现在我们正在寻找基于 API 的白名单。因此,在上述情况下,服务 A 将能够调用服务 B 的所有 API,我们希望阻止这种情况。因此,寻求帮助来扩展我们当前的实现,以在不更改资源的情况下支持相同的实现(因为资源在我们团队中意味着 service-2)。

因此,预期行为是服务 A 可以调用服务 B 的 API-1,但不能调用 API-2

最佳答案

在您的屏幕截图中,您使用的是 Oauth 1.0,您需要设置 resource这使得您无法在授权内设置API范围,您需要使用OAuth 2.0。顺便说一下,客户端凭证流会将范围设置为 xxx/.default ,此流程也不会包含范围名称,因此您也无法使用客户端凭据流程。

我这里有一个样本。首先,这是Service-B中的设置。我将 Azure AD 集成到我的 Web api 项目中。

builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration);

"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "client_id",
"ClientSecret": "client_secret",
"Domain": "tenant_id",
"TenantId": "tenant_id"
},

然后在我的网络 API 中:

[ApiController]
[Route("[controller]")]
[Authorize]
public class WeatherForecastController : ControllerBase
{

public WeatherForecastController(){}

[RequiredScope("Tiny.Read1")]
[HttpGet]
public async Task<string> GetAsync()
{
return "world";
}

[HttpGet("greet")]
[RequiredScope("Tiny.Read")]
public string greet() {
return "hello";
}
}

我使用身份验证代码流生成一个访问 token ,其中包含我定义的范围:

enter image description here

这是我的测试结果:

enter image description here

关于如何公开自定义API作用域,可以按照这个official document 。这个答案展示了如何generate access token by auth code flow 。但如果您尝试在 Service-A 中生成访问 token 来调用 Service-B,则可以使用 on_behalf_flow, this answer包含具有 Microsoft 身份的代码片段并使用 _tokenAcquisition 生成访问 token ,以及 this answer用于客户端调用AAD保护的API。

关于azure - 每个 API 的 AAD 访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76231261/

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