如何在.net API中授权使用客户端密钥生成的Azure AD access_token?

问题描述 投票:0回答:1

我在 Azure 中创建了一个应用程序来控制我正在开发的应用程序的身份验证。我开发了一个小程序来使用客户端密钥生成 access_token,并且我想使用控制器中的 [Authorize] 在我的 api 中验证此令牌。问题是,当我发送令牌时,应用程序返回 401 未经授权的代码。我在appsettings中添加了应用程序信息(clientId和TenantID),并在program.cs文件中添加了身份验证。

不久前我做了同样的实现,但在本例中我通过 Angular 前端调用 API。当时,我使用 Angular 中的 MSAL 库来登录和检索 idToken 并在请求中发送它。这个带有前端的应用程序工作得很好,但在这种情况下,使用客户端密钥生成令牌并发送 access_token 不起作用。

生成access_token的方法:

public static async Task LoginWithSecret()
{
    var authority = $"https://login.microsoftonline.com/{ tenantId }";
    var scope = "https://graph.microsoft.com/.default"

    var app = ConfidentialClientApplicationBuilder
               .Create(clientId)
               .WithClientSecret(clientSecret)
               .WithAuthority(new Uri(authority))
               .Build();

    var result = await app.AcquireTokenForClient(new[] { scope }).ExecuteAsync();

    var accessToken = result.AccessToken;
    Console.WriteLine($"{ accessToken }");

}

API应用程序设置文件:

  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "*********************************",
    "ClientId": "*********************************"
  },

program.cs类:

IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApi(configuration);
(...)

控制器:

[HttpPost]
[Authorize]
public async Task<ActionResult<bool>> MyMethod(ViewModel model) {
 (...)
}

我尝试了几个例子,但没有一个起作用。正如我所说,我已经使用 API 和 Angular 前端实现了类似的功能,但在本例中,我使用了用户登录前端时 MSAL 库返回的 idToken。在这个示例中,我正在尝试,我没有登录屏幕,这就是我使用 clientsecret 来获取此令牌的原因。

请问谁能告诉我是否需要在 API 中进行更多配置?

谢谢

c# .net azure bearer-token msal
1个回答
0
投票

当您使用范围 https://graph.microsoft.com/.default 时,您将请求在向 Graph API 发出请求时使用的令牌。

如果这就是您想要的,那么您需要确保在 Entra ID 中配置应用程序注册的 API 权限。

因此,编辑您的应用程序注册并配置应用程序权限,以设置使用 Graph API 所需的权限。

如果您需要您的 AppX 调用您拥有的其他 AppY/ApiY,并授权该请求,那么最好的方法是为您的 AppY 注册一个应用程序(安全主体),然后在您请求令牌时在 AppX 上注册,您需要在范围内指定 AppY 的 client id,因此在这种情况下,您请求一个令牌来独占访问 AppY,并且您限制了令牌的范围。

假设您正在使用守护程序应用程序来调用 API,请点击描述该场景的链接:

https://learn.microsoft.com/en-us/entra/identity-platform/scenario-daemon-overview

有关应用程序注册权限的更多信息,请访问以下链接:

https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-configure-app-access-web-apis?source=recommendations#add-permissions-to-access-your-web- API

© www.soinside.com 2019 - 2024. All rights reserved.