加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

Azure AAD – 受众群体无效

发布时间:2020-12-16 07:13:26 所属栏目:asp.Net 来源:网络整理
导读:我创建了一个用azure活动目录保护的webapi.我现在需要测试它并尝试使用带有授权标头的fiddler.我正在尝试使用以下代码生成令牌. Target obj = (Target)cmbTarget.SelectedItem;AuthenticationResult authenticationResult;string aadInstance = obj.AADInsta
我创建了一个用azure活动目录保护的webapi.我现在需要测试它并尝试使用带有授权标头的fiddler.我正在尝试使用以下代码生成令牌.

Target obj = (Target)cmbTarget.SelectedItem;

AuthenticationResult authenticationResult;
string aadInstance = obj.AADInstance; // "https://login.windows.net/{0}";
string tenant = obj.Tenant; //"rudderless.onmicrosoft.com";
string apiResourceId = obj.ApiResourceId; //"15b4ac7f-23a8-4958-96a5-64159254690d";
string clientId = obj.ClientId; // "47cdc6c3-226a-4c38-b08e-055be8409056";

Uri redirectUri = new Uri(obj.RedirectUri); //new Uri("http://nativeclient");
string authority = string.Format(aadInstance,tenant);
authContext = new AuthenticationContext(authority);

authenticationResult = this.authContext.AcquireToken(apiResourceId,clientId,redirectUri,PromptBehavior.Always);

txtToken.Text = authenticationResult.AccessToken;
Clipboard.SetText($"Bearer {txtToken.Text}");

我成功生成了令牌,当我使用令牌调用webapi时,它会抛出401消息

WWW-Authenticate: Bearer error=”invalid_token”,error_description=”The
audience is invalid”

解决方法

我认为重新审视身份验证的不同步骤很重要,希望通过讨论,您将能够解决您遇到的问题.

当客户端尝试获取资源的访问令牌时,它需要向AAD指定它想要获取令牌的资源.客户端可以被配置为调用多个资源,所有资源都具有不同的配置,因此期望资源始终在访问令牌请求中指定.

资源可以是资源的App ID GUID,也可以是在Resource上注册的有效App ID URI. AAD应该能够根据您提供的值唯一标识您尝试访问的资源.但请注意,如果您使用App ID GUID,您将从AAD获取一个令牌,其中Audience声明是App ID GUID.或者,如果您使用应用程序ID URI,您将在令牌中看到该URI作为受众声明.

在这两种情况下,您将获得“相同”资源的令牌,但令牌中的声明将以不同方式显示.此外,单个应用程序资源可能在其应用程序上注册了多个App ID URI.根据您在身份验证请求中使用的身份,您将在令牌中获得与您传入的资源参数匹配的不同受众群体声明.

最后,一旦获得令牌,您就将其发送给资源API,后者将验证令牌以获取许多内容,例如:客户端ID声明,范围/角色声明,身份验证方法(‘acr’声明),绝对是观众声称符合他们的期望!

这意味着资源API最终需要说“我接受< App ID GUID>作为有效的受众声明”…或“我接受< App ID URI>作为有效的受众声明”.这种逻辑可以内置到您正在使用的库中(如OWIN),但是您需要确保在API端,为正在期望的受众正确配置它.如果您愿意,您可以这样做,以便您的API根本不检查受众声明!令牌中的所有声明都是纯文本,因此您可以随心所欲地执行任何操作,但在这种情况下您将无法获得非常安全的API:]

当天结束时,我的预感是这个错误来自您自己的API,并且它正在发生,因为您尚未将您的应用配置为接受与您的资源的应用ID ID GUID相匹配的Audience声明(它看起来像您正在传递的内容)当您根据代码示例获取令牌时).

我希望这能解决你的问题!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读