https://myportal.onmicrosoft.com/test_core_web_api_spa
时,我会收到关于受众无效的401错误。 这与Azure中的API定义相匹配。唯一缺少的部分是user_impersonation
的自定义范围,但当我使用MSAL clientApplication.acquireTokenSilent(tokenRequest2)
调用获取令牌时,我的作用域与API的完整URL和范围匹配:const tokenRequest2 = {
scopes: ["https://myportal.onmicrosoft.com/test_core_web_api_spa/user_impersonation"]
};
在API中建立认证,我正在使用以下代码(我注意到不多的示例使用此方法)
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
API的配置如下:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "myportal.onmicrosoft.com",
"TenantId": "my-tenant-guid",
"ClientId": "my-api-client-guid"
},
我注意到很多示例显示API的不同格式(我假设这些是旧版本),但在Azure中公开的API范围列在https://myportal.onmicrosoft.com/test_core_web_api_spa/user_impersonation
。我还使用Azure仪表板添加了客户端的guid以访问此公开的API范围。
有任何想法我做错了什么?或者,是否有任何简单的示例使用MSAL、JQuery作为客户端和一个简单的.Net Core Web Api?似乎我找到的所有示例都过时了,或者使用不同的客户端或不同的身份验证方法。
更新以显示在Azure中公开API应用程序的设置。
我添加了一张来自Azure的图像,显示了“公开API”屏幕的设置。我添加了自定义范围user_impersonation
,然后添加了客户端并授予其访问该范围的权限。正如您所看到的,我的Azure订阅没有其他人看到的api://guid
格式。当我尝试使用那个api://guid
格式时,我会收到错误消息The resource principal named api://guid was not found in the tenant
。
我还添加了令牌的图像。aud
标记与我在Azure中的web api应用程序名称匹配。而scp
列出了我附加到我的范围请求的范围。我只是看不到还有什么可以尝试的。