如何在没有用户交互的情况下对 Azure Active Directory 进行身份验证?

Gle*_*lig 5 authentication rest azure oauth-2.0 azure-active-directory

我希望在没有用户交互的情况下获取访问令牌,以便自动调用 Azure 服务(计算、网络等)的 REST API。在文档中,列出了几种身份验证方案。最适合我的用例的是“Daemon or Server Application to Web API”。

我按照说明请求访问令牌:首先我在 Azure Active Directory 中注册了一个应用程序。然后我创建了一个与应用程序 ID(client_id 参数)相关联的密钥(client_secret 参数)。我还获得了 App ID URI(资源参数)。我使用所有这些参数来创建对 Azure AD 的 /token 端点的 POST 请求。但是我收到以下错误消息:

{
    "code":"InvalidAuthenticationTokenAudience",
    "message":"The access token has been obtained from wrong audience or resource 'https://solutionsmosaixsoft.onmicrosoft.com/<APP_ID_URI>'. It should exactly match (including forward slash) with one of the allowed audiences 'https://management.core.windows.net/','https://management.azure.com/'."
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我是否将资源参数设置为错误的值?

Nan*_* Yu 4

资源参数告诉您的应用程序从哪里获取令牌(正在请求访问令牌的资源的标识符)。如果您想获取令牌来调用 Azure 服务管理 API ,可以将资源设置为https://management.core.windows.net/

编辑:

如果您要调用的API是微软提供的API,则资源是已知的,例如:

如果要调用您创建的 API 应用程序,可以使用资源 WebAPI 的客户端 ID 或应用程序 ID URI(在 Azure 管理门户中的 Azure AD 应用程序的配置选项卡中找到它们)。

您可以参考以下链接获取代码示例:

https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-code-samples