当尝试使用ADAL.NET从AAD获取JWT时,旧式/本地API的资源标识符应该是什么

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

我有一个旧版/本地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,它需要资源标识符和客户端凭据。

我应该使用什么资源标识符?假设我要保护的旧版/本地API托管在https://test.qwerty.com.au/api/v2/resource

oauth azure-active-directory adal
2个回答
0
投票

托管地址无所谓。它除了以下两件事之一:

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

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

因此,它需要API的标识符。

作为补充说明,请确保您还同时注册了对该API的至少1个应用程序权限,并将其授予您的客户端应用程序。这样可以防止对您的API的攻击。https://joonasw.net/view/always-check-token-permissions-in-aad-protected-api


0
投票

除了添加到@juunas的答案之外,您的租户中应该注册了2个应用。一种用于您的Web API,另一种用于使用者。

首先,您需要进行配置以使用Azure AD保护Web API。对于此步骤,您可以参考:JwtBearer configuration。一种简单的方法是创建一个新的Web API项目,并选择使用“工作或学校帐户”进行身份验证,然后您将获得一个示例。

enter image description here

并且,在Startup类中,它设置为验证受众,在我的情况下是https://hanxia.onmicrosoft.com/JackTestWebAPI_20191216090406

enter image description here

下一步是获取令牌:

enter image description here

最后,您可以使用令牌来调用Web API:

enter image description here

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