Microsoft Graph 和 Azure Ad 用户身份验证

2024-03-18

我在 Azure 广告中注册了一个应用程序。

当我使用以下详细信息执行 ADAL 时,我会获得一个授权令牌以与 microsoft graph api 一起使用。

    `username      = '[email protected] /cdn-cgi/l/email-protection'
    password      = 'password123'
    client_id     = application id from azure ad
    client_secret = keys from application on azure ad
    tenant        = directory id from azure ad`

使用此令牌,我可以获取我的共享点帐户中的所有站点的列表。

下面是我调用的端点来获取带有不记名令牌的站点:https://graph.microsoft.com/v1.0/sites?search=*

但是,当我仅使用使用以下端点生成的令牌进行客户端身份验证时,我无法访问站点列表。login.microsoftonline.com/tenant_id/oauth2/v2.0/token

    `grant_type : client_credentials
    clientid : client_id
    clientsecrte : client_secret
    scope : https://graph.microsoft.com`

它不会返回所有站点。

有没有一种方法只需客户端身份验证即可获取所有站点列表。

或者我可以获得一个没有用户密码的用户身份验证令牌。

这是我正在使用的解码令牌:{ "aud": "https://graph.microsoft.com", "iss": "https://sts.windows.net/586145ec-0428-4da6-8061-fb114257ab70/", "iat": 1528949458, "nbf": 1528949458, "exp": 1528953358, "aio": "Y2dgYLh*************xAAA=", "app_displayname": "App Name", "appid": "504ddb16-2899-48be-be57-**********", "appidacr": "1", "idp": "https://sts.windows.net/586145ec-0428-4da6-8061-fb114257ab70/", "oid": "afcf166f-24c2-49f1-b285-b672d0413c50", "roles": [ "Sites.Read.All", "Sites.ReadWrite.All", "Sites.Manage.All", "Sites.FullControl.All", ], "sub": "afcf166f-24c2-49f1-b285-b672d0413c50", "tid": "586145ec-0428-4da6-8061-fb114257ab70", "uti": "hwYd8FZCH0KruWGRFiIHAA", "ver": "1.0" }

我还获得了其他权限,但这些权限与 Microsoft Graph api 中的站点相关


Cause:

成功的人正在使用ROPC flow它可以得到委托权限用户的行为。但失败的人正在使用client_credentials flow哪个得到应用程序权限并且不能代表用户。


更新答案

解决方案:(在进行此测试之前,请确保您的租户拥有 SPO 许可证)

  1. 尝试添加Sites.Read.All您注册的 AAD 应用程序中的应用程序权限以及征得管理员同意在你获得令牌之前先获取它。

  2. 如果您使用的是 AAD v1 端点,您可以通过以下方式获得管理员同意单击授予权限按钮.如果您使用v2端点,请在您的互联网浏览器中输入此类URL以进行管理员授权:

    https://login.microsoftonline.com/{yourtenant}/adminconsent?client_id={the applicationid of your client}&state=123&redirect_uri={the redirect uri of your app}

并使用全局管理员帐户登录并接受此权限。

  1. In my test lab, I used v2 endpoint.Here is the token I got via Postman: enter image description here

这是解码后的令牌https://jwt.ms https://jwt.ms,我们可以解码令牌以确保它具有我们想要的权限。

  1. 然后我在 head 中使用这个令牌调用 Microsoft Graph API 并成功:

有关 Microsoft Graph 站点权限的更多详细信息,请参阅本文档 https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference#sites-permissions.

请让我知道这可不可以帮你!

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

Microsoft Graph 和 Azure Ad 用户身份验证 的相关文章

随机推荐

  • XSLT - 将前同级元素与当前节点元素进行比较

    我有这个 XML 文件
  • JavaFX 如何滚动 ScrollPane 以使节点位于视口中间?

    我必须创建显示当前时间的时间线 我正在使用 AnchorPane 并将添加的行放置在 ScrollPane 中 我需要模拟1天 滚动窗格宽度为 2880px 每60px为一小时 我的限制是 前一天 12 小时 第二天 12 小时 移动我的线
  • 如何为BackgroundService传递参数?

    我阅读了有关 ASP net core 2 2 的内容 并找到了有关通用主机的参考资料 我尝试在示例下使用 backgroundService 创建控制台应用程序 https github com aspnet AspNetCore Doc
  • 一个值在数组中存在多少次[重复]

    这个问题在这里已经有答案了 我想做的第一件事是找出我在输入中输入的数字是否存在于数组中 这有效 我想做的第二件事是找出它存在的次数 我在这里走的路正确吗
  • 如何将 Flot 与 AngularJS 集成?

    我对 Angular 和 Flot 很陌生 但对 Jquery 和 Javascript 很熟悉 我对如何将 Flot 图表绑定到 Angular 数据模型有点困惑 因为 Flot 是一个 JQuery 插件 我四处搜寻 但未能找到示例 我
  • 库存管理数据库设计

    我正在为我的公司创建一个内部网 我们希望在其中进行库存管理 我们销售和租赁报警系统 我们希望很好地了解哪些产品仍在我们的办公室中 哪些产品已出租或出售 何时出租或出售等 目前我想到了这个数据库设计 每次我们创建新合同时 该合同都与地点或商品
  • 如何扩展Generator类?

    我尝试过滤生成器 并期望这种通用功能必须在 JavaScript 中的任何位置定义 因为它是为数组定义的 但我找不到它 所以我试图定义它 但我无法扩展内置发电机 我有一个示例生成器 function make nums let nums n
  • NSFetchRequest 未捕获属性已更改的对象

    我在 Mac Os X 10 6 上使用 SQL 存储时遇到了 Core Data 的奇怪问题 我有一个NSManagedObject子类称为Family有属性name和一段关系personList连接到另一个NSManagedObject
  • 必须从 UI 线程调用 getText() 方法

    必须从 UI 线程调用 getText 方法 请帮忙 我是 android studio 的初学者 在网上找到了这些代码 但无法弄清楚 我真的很感激 public class MainActivity extends AppCompatAc
  • Django password_reset 支持 html 电子邮件模板吗?

    在我看来 django 仅支持开箱即用的密码重置电子邮件的纯文本消息 我如何使用 html 模板来实现此目的 以下是如何进行覆盖 urls py url r user password reset YOUR APP views passwo
  • node.js - 代码保护?

    我想在下一个项目中使用node js 但我的老板不喜欢我们的竞争对手可以阅读源代码 有没有办法保护 JavaScript 代码 您可以使用 Node 的 NativeExtension 来完成此操作 你会有一个boostrap js为 js
  • 我如何能够在 C++ 中声明一个在运行时确定的可变长度数组?

    请检查这段代码 它编译并运行得非常好 问题是 当我开始学习 c turbo c 时 我从来无法将任何类型的数组声明为 datatype var variable set at runtime 我想当然地认为这在最新的 gcc 编译器中是不可
  • 如何根据优先级和关联性来解析(复杂)声明?

    符号 如 等 两者都使用表达式 and 声明 这是两个不同的概念 In 表达式 符号为运营商 为此我们有一个明确定义的优先级和结合性表 当表达比较复杂 我们可以利用这张表进行分解分析 例如 a b c Question In 声明 这些符号
  • 使用 Kinesis Analytics 构建实时会话

    是否有某个地方的示例 或者有人可以解释如何使用 Kinesis Analytics 构建实时会话 即会话化 这里提到这可能 https aws amazon com blogs aws amazon kinesis analytics pr
  • Oracle XMLQuery 正在破坏命名空间

    甲骨文版本11 2 下面是我在 XMLType 列上运行的 XMLQuery 的简化版本 当我运行查询时 它只是解析并重新创建存储的 XML tsxm 命名空间 不等于默认命名空间 被改变 该查询不执行任何操作 并且可以轻松重写 但真正的
  • 如何在 pandas df.query() 中使用循环变量

    我该如何解决以下问题df query行停止获取错误消息 name z is not defined 我有 3 列数据 想要绘制 3D 多边形 我运行一个循环来配对 X Y 其中我尝试使用循环变量 z 筛选一列 zs 20 30 40 50
  • 如何向 Jackson 全局添加自定义序列化器并默认使用

    假设我想序列化Boolean into Number 默认情况下 我知道我可以逐个领域地做到 JsonFormat shape Shape NUMBER private Boolean success 但是我可以 注册 我的自定义序列化器
  • 如何使用 WinRT 获取文件?

    我想要的是 从 AppData 获取要使用的 xml 我编码的内容 StorageFolder localFolder Windows Storage ApplicationData Current LocalFolder StorageF
  • 使用 R 在一张图中绘制光谱数据

    我有多个数据框 其中第一列 最后填充 NA 是波数 其他列是多次观测的特定波数的变量 是否有可能以我的第一列保存 x 轴变量而另一列绘制为具有各自 y 值的大图的方式绘制列 我已经尝试过 matplot 结果是 数字 而不是点 matplo
  • Microsoft Graph 和 Azure Ad 用户身份验证

    我在 Azure 广告中注册了一个应用程序 当我使用以下详细信息执行 ADAL 时 我会获得一个授权令牌以与 microsoft graph api 一起使用 username email protected cdn cgi l email