0

我之前已经构建了一些自定义连接器,但由于某种原因,在获取自定义连接器以针对我编写的 api 进行身份验证时遇到了真正的问题。

API 是用 .netcore 5 编写的,作为 WebApp 托管在我尝试连接的同一租户中。我检查了身份验证设置,并且 ClientId 指向下图中的 37008370 clientid guid。

这就是我在连接器中设置身份验证的方式 在此处输入图像描述

我已使用 blazor 应用程序连接到此 API,因此我认为身份验证设置正确。

当我尝试为自定义连接器设置身份验证时,虽然我得到以下响应

{  "content-length": "0",  "date": "Wed, 20 Oct 2021 10:11:51 GMT",  "request-context": appId=cid-v1:4e1e4b6a-ace8-48e9-8121-546d6e834953",  "www-authenticate": "Bearer error=\"invalid_token\", error_description=\"The audience 'api://37008370-*********' is invalid\"",  "x-ms-apihub-cached-response": "false",  "x-powered-by": "ASP.NET"}

我想我已经正确设置了一切,看不到哪里出错了。

任何帮助表示赞赏。

谢谢

斯图尔特

4

1 回答 1

0

令牌的受众应始终与注册的应用程序的客户端ID匹配。错误的原因是相同的。受众是 api://xxxx-xx 和客户端 id=3700-xxx。资源可以是资源的 App ID GUID,也可以是在资源上注册的有效 App ID URI。AAD 应该能够根据您提供的价值确定您尝试访问的资源。

请注意,如果您使用 App ID GUID,您将从 AAD 获得一个令牌,其中 Audience 声明是 App ID GUID。或者,如果您使用 App ID URI,您将看到该 URI 作为令牌中的受众声明。

因此,您需要clientId :api://xxxxx-xxxx在代码的应用程序设置中添加(即应用程序 ID uri 存在于 azure 广告应用注册门户的公开 api 刀片中)。

azure 为令牌生成的“aud”值也由 AD 应用程序清单中的“accessTokenAcceptedVersion”属性控制。

此属性定义将生成的访问令牌的版本。在http://jwt.io检查你的 jwt 令牌如果你得到这个。检查您的天蓝色广告的清单 .app"accessTokenAcceptedVersion" 属性值可能是 null 或一,或者应该是二。如果它为空,则可能要考虑添加 api:// 前缀。else api:// 前缀可以忽略。

于 2021-10-21T14:02:52.943 回答