Azure AAD - 受众无效

2024-04-12

我创建了一个使用 azure Active Directory 保护的 Web api。我现在需要对此进行测试并尝试将 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:承载错误=“invalid_token”,error_description=“ 观众无效”


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

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

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

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

最后,获得令牌后,将其发送到资源 API,资源 API 将验证令牌的多项内容,例如:客户端 ID 声明、范围/角色声明、身份验证方法(“acr”声明) , 和确实观众声称符合他们的期望!

这意味着资源 API 最终需要说“我接受 作为有效的受众声明”...或“我接受 作为有效的受众声明”。这种逻辑可能内置于您正在使用的库(如 OWIN)中,但您需要确保在 API 端,您已针对您期望的受众正确配置了它。如果您愿意,您可以让您的 API 根本不检查受众声明!令牌中的所有声明都是纯文本,因此您确实可以做任何您想做的事情,但在这种情况下您不会有一个非常安全的 API :]

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure AAD - 受众无效 的相关文章

  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕
  • 文本溢出:省略号显示不同的字符

    我这里遇到了一些 CSS 问题 看这张图片 https www flickr com photos 125543025 N07 saved 1 在此图像中 我为文本 INTENSE TRAINING 添加了 CSS 样式 sample st
  • 我们什么时候应该在 Django 中使用“db_index=True”?

    当我们应该定义db index True在模型字段上 我正在尝试优化应用程序并且我想了解更多信息db index 什么情况下我们应该使用它 文档说使用db index True在模型字段上用于加速查找 但在存储和内存方面略有缺点 我们应该使
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code
  • bash:gitolite:找不到命令

    我正在尝试使用 Gitolite 在 Gitlab 中创建一个新分支 我完成安装步骤 当我遇到 设置 gitolite 部分时 我遇到了麻烦 我跟着这个link http sitaramc github com gitolite setup
  • 如何在 kubernetes 中将秘密标记为可选?

    来自文档 除非将秘密标记为可选 否则必须先创建秘密 然后再将其作为环境变量在 pod 中使用 引用不存在的 Secret 将阻止 pod 启动 如何将秘密标记为可选 您正在寻找的是 name ENV NAME valueFrom secre
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • If else 在 Web 网格列中

    如何在 webgrid 列中添加条件 if else grid GetHtml tableStyle table table bordered columns grid Columns grid Column RealName Name g
  • Azure Functions 计时器触发器线程安全

    我想知道是否有人知道如果您在 Azure 函数上设置了 Cron 设置 如果其任务执行时间超过 5 分钟 则每 5 分钟运行一次 会发生什么情况 它备份吗 或者我应该实现一个锁定功能 以防止某些东西 例如在循环中 处理先前调用已经处理的数据
  • 将 Angular Web 组件 EventEmitter 监听到 javascript

    我在以下工具的帮助下创建了一个小型网络组件本文 https medium com IMM9O web components with angular d0205c9db08f使用角度元素 其中包括 Input and Output 我能够将
  • svn 强制迁移

    我正在考虑将我们的 svn 代码库迁移到 perforce 看看谷歌搜索结果 我确实找到了两个具有相同功能的工具 P4转换ftp ftp perforce com pub perforce tools p4convert docs inde
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用
  • PLS-00103:遇到符号“;”当预期出现以下情况之一时:

    我正在尝试插入用户安全问题的答案 以用于密码重置功能 Ellucian 横幅 v8 提供了一个用于运行此 API 的 API 我对他们的 API 非常陌生 从下面的错误消息来看 我还远远没有正确运行它 任何帮助表示赞赏 我尝试在 Oracl
  • 自定义字符串查询操作的 Linq to NHibernate 可扩展性?

    我希望能够在 NHibernate Linq 表达式中使用自定义字符串查询 举例来说 这只是一个例子 我希望能够选择包含属性的实体 该属性是特定字符串的字谜 var myEntities EntityRepository AllEntiti
  • Keystore getEntry 在 Android 9 上返回 NULL

    c我已对存储在 Android 密钥库中的登录密码进行了加密和解密 在 Android 9 上 我观察到应用程序在尝试解密密码时崩溃 我无法重现它 但拥有 Pixel 3 的用户是崩溃的设备之一 下面是我如何从密钥库解密密码 private
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci

随机推荐

  • decltype中的成员函数调用

    以下代码 struct A int f int auto g int x gt decltype f x 无法编译并出现错误 error cannot call member function int B f int without obj
  • 如何在手机SD卡或其他位置搜索文件

    我想搜索用户移动设备上具有特定扩展名的文件 我尝试搜索但找不到任何直接的 API 是否有特定的 API 或者是否有实现相同目的的繁琐方法 或者是否有一种机制可以调用 linux 调用 find 或类似的东西 Thanks boolean i
  • 使用 Flask 代理到另一个 Web 服务

    我想将对 Flask 应用程序发出的请求代理到计算机上本地运行的另一个 Web 服务 我宁愿使用 Flask 而不是更高级别的 nginx 实例 这样我们就可以重用应用程序中内置的现有身份验证系统 我们越能保持这种 单点登录 越好 是否有现
  • 我可以改变传递给 setState 函数的状态吗?

    我知道我不应该直接在 React 中改变状态 但是当我使用函数时情况如何 onSocialClick e gt const id e target value this setState prevState props gt prevSta
  • 以编程方式在 WooCommerce 中创建多个优惠券

    我一直在寻找一种向 WooCommerce 批量添加优惠券的方法 它实际上是一个包含 800 个会员号码的列表 可以提供折扣 而优惠券似乎是实现此目的的最佳方式 我找到了一种以编程方式添加单张优惠券的方法 http docs woothem
  • Pycharm的终端不会更改Project Interpreter处Python版本对应的Python版本

    我已经安装了 PyCharm 2016 3 并在 Windows 上安装了两个版本的 Python 3 5 2 和 2 7 9 我想使用这两个版本 因此我在 项目解释器 窗口中对其进行了配置 我选择的是3 5 2版本如下图 之后我打开Pyt
  • 在 Meteor 应用程序中使用 Disqus / reCaptcha

    我正在开发一个使用 Meteor 的应用程序 我正在尝试在我的其中一个表单上使用 reCaptcha 并在我的某些页面上使用 Disqus 评论系统 但问题是 当我运行流星服务器时 这些都没有被渲染 以下是我添加到模板中的示例 Disqus
  • 如何结合 websockets 和 http 来创建一个保持数据最新的 REST API? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在考虑使用 websockets 和 http 构建一个 REST API 其中我使用 websockets 告诉客户端新数据可用或直接向客
  • 根据连续值之间的差异将列表拆分为子列表

    我有一个值列表 其中每个值至少有一个 但通常是多个 连续值 且增量为 0 033 l 26 051 26 084 26 117 26 15 26 183 31 146 31 183 34 477 34 51 34 543 我想将此列表拆分为
  • Java事件派发线程讲解

    我最近开始学习和探索 Java 中 GUI 编程的基础知识 编程已经有一段时间了 我只做过后端工作或工作 因此我最接近的用户界面是命令控制台 我知道这很尴尬 我正在使用 Swing 据我所知 这意味着我也在使用 AWT 我的问题是基于这段代
  • MySQL SELECT 中的条件 SELECT

    Table id price is active 1 20 99 0 2 10 99 1 3 30 99 0 4 15 99 1 5 35 99 1 我试图选择 is active 等于 1 的所有行的 COUNT 所以我使用了这个简单的查
  • 如何在Python中的多类分类问题上获取每个类的SHAP值

    我有以下数据框 import pandas as pd import random import xgboost import shap foo pd DataFrame id 1 2 3 4 5 6 7 8 9 10 var1 rando
  • 在 .ts 文件中使用 ngx-translate

    我想在侧菜单标题中使用翻译 我读过本教程 https ionicthemes com tutorials about internationalize and localize your ionic2 app with ngtranslat
  • 添加填充到谷歌地图bounds.contains()

    我有一个侧边栏 显示谷歌地图当前地图视图中的标记名称 侧边栏内容随着地图的移动而变化 google maps event addListener map bounds changed function document getElement
  • 相对路径如何在 Access 2007 中指定链接表?

    我有一个 Access 数据库的前端和后端 前端引用链接表 我需要进行相对链接而不是显式链接 即 database 被引用而不是 address database 是否可以这样做 或者我必须指定绝对路径 我已经尝试过上面的一些答案 尤其是马
  • 在 IE 8 中加速“:not”jQuery CSS 选择器?

    我在 IE 中遇到性能问题 并且正在执行一个包含以下选择器的大循环 td not some cell 在 IE 中是否有更有效的方法来做到这一点 IE8不支持 not选择器本身 所以如果您使用像 jQuery 内置的 Sizzle 这样的纯
  • 基于 Rails cookie 的会话:将会话范围与过期时间混合

    所以我以不同的方式问了这个问题here https stackoverflow com questions 14712968 session expiration not working in rails 14713390 14713390
  • 冒泡排序中的预期交换次数[重复]

    这个问题在这里已经有答案了 可能的重复 冒泡排序中的交换次数 https stackoverflow com questions 11331314 number of swaps in bubble sort 问题简述如下 给定一个数组 A
  • 调用网页的任务计划尽可能简单

    我有一个网页 它进行一些数据库更新 例如http www mysite com updates asp http www mysite com updates asp 我希望每天 09 00 自动调用此页面 我知道如何在IIS中安排任务 但
  • Azure AAD - 受众无效

    我创建了一个使用 azure Active Directory 保护的 Web api 我现在需要对此进行测试并尝试将 fiddler 与授权标头一起使用 我正在尝试使用以下代码生成令牌 Target obj Target cmbTarge