使用 v2.0 端点的声明中缺少 UPN

2024-04-21

我已经设置了一个类似于 Microsoft 的以下示例的项目,其中我有一个本机应用程序请求使用 v2.0 端点访问 Web api:https://github.com/azureadquickstarts/appmodelv2-nativeclient-dotnet https://github.com/azureadquickstarts/appmodelv2-nativeclient-dotnet

我已使用在 AAD 中注册的帐户(而不是 Microsoft 帐户)成功登录 AAD。我确实收到了一份索赔清单。但是,upn 声明和电子邮件声明丢失。我正在使用 jwt.ms 来分析索赔,这是我从索赔中收到的信息:

{
   "typ": "JWT",
   "alg": "RS256",
   "kid": "1LTMzakihiRla_8z2BEJVXeWMqo"
}.{
   "aud": "Client ID/ App ID",
   "iss": "https://login.microsoftonline.com/tenantid/v2.0",
   "iat": 1534758037,
   "nbf": 1534758037,
   "exp": 1534761937,
   "aio": "ATQAy/8IAAAA+PZj+5vnrUwDfqTTKNBDcy0Tl7rOztkxzrb9YWXHVlevKwrlsGBP/gYAvL4bwr2G",
   "azp": "Client ID/ App ID",
   "azpacr": "0",
   "e_exp": 262800,
   "name": "xxx yyy",
   "oid": "9cc37e1d-0490-4cf4-9bb8-c872899dee91",
   "preferred_username": "[email protected] /cdn-cgi/l/email-protection",
   "scp": "access_as_user",
   "sub": "2l0nasrd8QbBpiEu1RGLFCavj3SzTzizIgmKAiMbdU0",
   "tid": "tenantid",
   "uti": "HG2cIi_MGUyBxBl6MzFPAA",
   "ver": "2.0"
}.[Signature]

我不明白为什么我在索赔中没有收到 UPN。我真的很感激任何帮助!


您需要确保您也请求openidprofile范围。 有关各个权利要求中的范围提供哪些信息的信息可以在文档中找到here https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-id-and-access-tokens一些基本的概述信息here https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent我下载了您引用的示例。在 App.config 文件中,我将范围键更改为 /access_as_user openid profile email" /> 并运行代码。这会导致获得 Preferred_username 声明 - “代表 v2.0 端点中用户的主用户名。它可以是电子邮件地址、电话号码或没有指定格式的通用用户名。它的值是可变的,可能会随着时间的推移而改变。为了收到此声明,需要配置文件范围。” 这openid, profile and email范围是 V2 端点中众所周知的范围的一部分,在Azure AD 开发人员文档 https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc。要查看这些众所周知的范围,您可以访问以下 URL:

https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration

Where {tenant}可以替换为 common = 同时拥有个人 Microsoft 帐户和 Azure Active Directory (Azure AD) 的工作或学校帐户的用户可以登录到该应用程序。 组织 = 只有拥有 Azure AD 工作或学校帐户的用户才能登录该应用程序。 消费者 = 只有拥有个人 Microsoft 帐户的用户才能登录该应用程序。 tenantGUID或tenantName =(您的特定Azure AD租户ID或名称 - 即contoso.onmicrosoft.com)单个租户的用户可以访问该应用程序。可以使用 Azure AD 租户的友好域名或租户的 GUID 标识符。

https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration您将获得 JSON 的 URL,其中显示了以下可用的范围scopes_supported部分:

"scopes_supported": 
[
  "openid",
  "profile",
  "email",
  "offline_access"
],

这四个作用域是 v2 端点的特殊作用域,因此当您请求它们时,您不需要查看这些作用域正在访问哪些应用程序或服务主体。它们对于 v2 端点来说是全局的,因此当您请求它们时,您将请求它们作为openid profile email offline_access这些范围不应使用应用程序标识符。

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

使用 v2.0 端点的声明中缺少 UPN 的相关文章

随机推荐

  • 如何以编程方式访问 Silverlight FrameworkElement 的 ToolTipService?

    我们有一种语言机制 可以在加载 XAML 页面时递归遍历它们 检查每个元素的 Tag 属性 并使用其值来检索要应用于该元素的字符串资源 它目前不支持工具提示 我们必须在每个页面上都有特定的代码才能将语言资源应用于它们 我正在尝试将此功能添加
  • 没有公钥,GitLab 无法克隆公共存储库

    使用亚搏体育appGitLab 6 8 2 我可以以匿名方式克隆公共存储库吗 我的用户命名空间中的存储库标记为public 如果没有在 GitLab 中保存公钥 我就无法克隆它 例如 gt ssh T email protected cdn
  • svn 外部...是或否?

    我在这里读到了一些谴责使用 svn externals 的答案 我确实看到它们如何被滥用 这确实使我们更加依赖 Subversion 但我真的不认为我们的团队会很快放弃它 无论如何 这就是我的困境 我们的解决方案引用了多个项目 这些项目位于
  • 如何将 numpy 数组分成更小的块/批次,然后迭代它们

    假设我有这个 numpy 数组 1 2 3 4 5 6 7 8 9 10 11 12 我想将其分成两批 然后迭代 1 2 3 Batch 1 4 5 6 7 8 9 Batch 2 10 11 12 最简单的方法是什么 EDIT 我很抱歉我
  • 在笑话单元测试角度中显示正确的错误

    我正在 NX 角度工作区中编写单元测试 有时它会给出这样的错误 node 15320 UnhandledPromiseRejectionWarning TypeError Converting circular structure to J
  • 什么是可堆叠修改?

    我读过一本关于 Scala 的书 里面提到了可堆叠修改 using traits 什么是可堆叠修改它们的用途是什么 区分可堆叠修改 无论如何在 scala 中使用该术语 的基本品质是 super 根据特征的混合方式动态受到影响 而一般来说
  • 访问 ctypes 结构中的 np.array

    我有一个带有动态分配数组的 ctypes 结构 即 array 1d double npct ndpointer dtype np double ndim 1 flags CONTIGUOUS class Test Structure fi
  • 如何将多维 C 数组传递给函数? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至是多维 都存储在连续的内存中 因此您可以安全地将其转换为int 假设给定的数组是
  • Java、Spark 和 Cassandra java.lang.ClassCastException:com.datastax.driver.core.DefaultResultSetFuture 无法转换为阴影

    我在尝试将数据写入 Cassandra 数据库时遇到错误 我在这里得到了什么 1 字典 java package com chatSparkConnactionTest import java io Serializable public
  • Websocket-rails 不适用于 Nginx 和 Unicorn 的生产环境

    我有 Rails 3 2 应用程序和 gem websocket rails 0 7 在开发机器上 一切正常 在生产环境中 我使用 Nginx 1 6 作为代理服务器 使用 Unicorn 作为 http 服务器 Thin 用于独立模式 如
  • 如何在java中使用不同文件中的类?

    我是 Java 新手 这就是我正在尝试做的事情 我在 Windows 计算机上的此文件夹中有两个文件 d programs sims javasim src com jsim Person java Building java 在我的 Bu
  • 如何从 .t​​xt 文件中读取已知数量的未知大小的字符串并将每一行存储在矩阵的一行中(在 C 中)?

    标题是不言自明的 我几乎可以肯定 最终结果不会是一个矩阵 因为每行都有不同数量的列 所以它更像是可变大小的数组的数组 按大小对片段进行排序 最大的在前 也很有趣 这是我到目前为止所尝试过的 int main char str MAXLEN
  • 需要帮助升级我的 Rails 版本

    我是 Ruby on Rails 新手 我需要将我的rails版本从1 2 3升级到2 3 5 我在windows环境下使用mysql数据库工作 您能帮我清楚地说明升级rails版本所涉及的步骤吗 谢谢 正如您所说 您想要升级当前应用程序的
  • 在 JavaCameraView 中设置帧速率

    我想使用 JavaCameraView 将帧速率设置为 1 fps 当我打开相机时 帧速率约为 20 fps 我的目的是改变这个值 单击按钮后 1 fps 有人可以帮助我吗 我在互联网上搜索了很多 但我找不到任何有趣的东西 在文档中也htt
  • 无法在 Android 上使用 XOAUTH 连接到 Gmail IMAP

    我正在构建一个使用 Gmail 来备份一些数据的应用程序 我使用 XOAUTH 连接到 Gmail 并获取令牌和秘密 但我无法连接到 Gmail 的 IMAP 服务 我按照以下示例进行操作http code google com p goo
  • 将 HTML 作为 PHP 执行

    当我尝试将 PHP 嵌入到 HTML 文件中时 它不起作用 我编辑了 htaccess 以便将 HTML 文件视为 PHP 但是当我尝试访问 html 文件时 我的浏览器会下载它 而不是解析和显示它 编辑 我的 htaccess 内容 Ad
  • Java 源文件中可以有宏吗

    在我的程序中 我多次从控制台读取整数 每次 我都需要输入这一行 new Scanner System in nextInt 我习惯了 C C 我想知道我是否可以定义类似的东西 define READINT Scanner System in
  • Go 中通过 new(Type) 和 &Type{} 分配内存的区别

    考虑以下示例 type House struct func main house1 new House house2 House fmt Printf T T n house1 house2 Output main House main H
  • 超级丑陋的数字

    所以问题是 编写一个程序来查找第 n 个超级丑数 超级丑数是正数 其所有素数因子都在给定素数列表中 大小为 k 的素数 例如 1 2 4 7 8 13 14 16 19 26 28 32 是给定素数的前 12 个超级丑数的序列 2 7 13
  • 使用 v2.0 端点的声明中缺少 UPN

    我已经设置了一个类似于 Microsoft 的以下示例的项目 其中我有一个本机应用程序请求使用 v2 0 端点访问 Web api https github com azureadquickstarts appmodelv2 nativec