尝试使用 ADAL.NET 从 AAD 获取 JWT 时,legacy/on-prem API 的资源标识符应该是什么

What should resource identifier be for legacy/on-prem API when trying to aquire JWT from AAD using ADAL.NET

我有一个 legacy/on-prem API,我需要通过 OAuth 保护到 Azure Active Directory。

API 被可信应用程序使用,这些应用程序可以使用客户端凭据获取 JWT,如下所示:

var context = new AuthenticationContext("https://login.microsoftonline.com/<tenant-id>");
var credentials = new ClientCredential(clientId, clientSecret);
var result = await context.AcquireTokenAsync(resourceIdentifier, credentials);

使用 AcquireTokenAsync(String, ClientCredential) overload,这需要资源标识符和客户端凭据。

我应该使用什么资源标识符?
假设我想要保护的 legacy/on-prem API 托管在 https://test.qwerty.com.au/api/v2/resource

托管地址无关紧要。 它除了以下两件事之一:

  1. API客户端id/applicationid
  2. 应用 ID URI

第一个可以从 API 的应用程序注册概览中获得,第二个可以从公开 API 选项卡中获得。

所以它需要 API 的标识符。

另外请注意,请确保您也至少向 API 注册了 1 个应用程序权限,并将其授予您的客户端应用程序。 这将防止对您的 API 的攻击。 https://joonasw.net/view/always-check-token-permissions-in-aad-protected-api

添加到@juunas 的回答中,您的租户中应该注册了 2 个应用程序。一个用于您的 Web API,另一个用于消费者。

首先,您需要配置以使用 Azure AD 保护您的 Web API。这一步可以参考:JwtBearer configuration。一个简单的方法是新建一个 Web API 项目,并选择使用 "Work or School accounts" 进行身份验证,然后您将得到一个示例。

并且,在 Startup class 中,它被设置为验证观众,在我的例子中是 https://hanxia.onmicrosoft.com/JackTestWebAPI_20191216090406

下一步是获取令牌:

终于可以使用token调用Web了API: