【发布时间】:2019-07-29 09:30:28
【问题描述】:
我正在尝试调用受 AzureAD 身份验证保护的 REST API。从 Postman REST 客户端它的工作方式类似于,
https://example.com/getexample
标头:授权:承载。如果我以交互方式获取用户的令牌(例如 device_code 或 MFA),这将非常有用。
由于我想以非交互方式运行代码,我正在尝试通过服务主体对 REST 端点进行身份验证。
REST 服务器内置在带有 azure-passport node.js 包的 nodejs 中。
我已经创建了服务主体(本机应用程序)和相同的秘密。我能够从这个包以及下面的 curl 命令中获取 access_token
curl -X POST -d 'grant_type=client_credentials&client_id=[client id]&client_secret=[client secret]&resource=[client id of the server]' https://login.microsoftonline.com/[tenant]/oauth2/token
但如果我将此生成的令牌传递给 REST 端点,我会得到 401。
请帮助如何使用服务主体和密钥对自定义 REST 端点进行身份验证。
以下是我为服务主体(服务器和客户端)所做的配置细节
服务器 SP(node.js 应用程序) 创建服务主体,添加 User.Read API 权限。管理员授予 API 权限。 在“公开 API”下创建了一个自定义范围(API.Access)并选择了“管理员和用户”可以授予。 在 node.js 应用程序中,我只使用 user.read 范围
客户端 SP(邮递员) 创建服务主体,在 API 权限下添加服务器 SP(客户范围) 使用 curl 命令获取访问令牌而不传递任何范围。
【问题讨论】:
-
您是否已将 Web api 权限授予您的客户端应用程序?
-
我更新了问题,提供了有关服务主体配置的更多详细信息
-
我在范围方面出了点问题。我需要在 node.js 应用程序中添加自定义范围吗?并在使用 CURL 请求访问令牌时? @CaiyiJu 请帮忙
-
我今天试试,在这里更新。
-
我正在等待我的管理员授予权限 :)。抓住 Azure 管理员并不容易。
标签: node.js azure rest azure-active-directory