c# - 可以将 Graph API 身份验证令牌与 AzureRM 一起使用吗?
问题描述
我的项目的目标是能够通过 AzureRM 访问用户订阅。此应用程序将仅在默认目录中使用 - 单租户用于构建基础架构,并且正在构建为 C# 表单应用程序。
我在弄清楚如何登录用户以获取身份验证令牌以能够通过 GET 调用的授权标头时遇到问题。我目前得到的只是 401 - 未经授权。
我很好奇的是我是否需要尝试使用 AzureRM 登录我的用户(如果可能的话),或者通过 Graph API 登录是否可以,并且我在其他地方有问题需要调查。
解决方案
如何使用 AzureRM 获取访问(身份验证)令牌
您可以通过创建 Active Directory 应用程序和服务主体并使用 ClientID 和 ClientSecret 来检索 AccessToken。如何通过创建 AD、Client Id、Client Secret、Service Principal 来获取 auth 令牌,请遵循此文档以获得明确的步骤。
如何登录用户以获取身份验证令牌,以便能够通过 GET 调用的授权标头。
有 2 种方法可以传递令牌,通过HTTP authorization header
和Via the addition of a URL query parameter with "token=tokenvalue."
在这里,您使用的是授权标头方式!
您可以从 Microsoft 身份平台请求 OAuth 2.0 访问令牌。Azure AD 对运行应用程序的安全主体(用户、组或服务主体)进行身份验证。如果身份验证成功,Azure AD 会将访问令牌返回给应用程序,然后应用程序可以使用访问令牌对请求进行授权。
我目前得到的只是 401 - 未经授权。
Azure AD 颁发了两种访问令牌。
delegate-token - 用于委托用户操作用户的资源。
应用程序令牌 - 通常用于对所有组织的资源执行操作,此令牌中没有用户上下文(当前用户)。所以我们不应该使用这个令牌来执行
me
需要用户上下文的资源。
要使用 应用令牌操作资源,我们需要使用 users 集合指定用户,如下代码:
string userId = "";
var user = graphserviceClient.Users[userId].Request().GetAsync().Result;
要从 Azure 活动目录中读取来自用户的资源,我们需要授予User.Read.All; Directory.Read.All;
应用程序的权限。请检查 Azure 门户上的权限,以确保您已授予足够的权限。修改权限后,您可以通过解码此站点的令牌来检查这些权限
我是否需要尝试使用 AzureRM 登录我的用户(如果可能的话)或者通过 Graph API 登录是否可以
如果您的资源是“ https://graph.microsoft.com/ ”,那么您的权限应该是“ https://login.windows.net/common/oauth2/v2.0/token ”或相同的权限,但交换“common” " 用于您的 azure AD 租户 ID。
授权 auth 令牌 的步骤: 以下是我到目前为止所做的步骤:
- ADB2C/AAD 目录
- Web 应用程序在其中注册了 OpenID 并具有在此链接后管理 AD 中的用户所需的权限
- 当管理员登录时,受信任模式下的 Web 应用程序可以让他管理用户(创建/添加/等...)
- 现在我要使用的是 MS 图 (graph.microosoft.com) 的 InvitationManager 部分,以便能够发送邀请邮件。我可以兑换在 OpenIdConnectAuthenticationNotifications 中收到的代码以获取 MS 图的访问令牌吗?知道我已经这样做了,但对于 AD 图 (graph.windows.net)
注意:更新您的应用程序清单以将 Microsoft Graph 作为资源包含并请求所需的权限。
推荐阅读
- hugo - 如何修改 Hugo 中的站点地图 URL?
- javascript - 有没有办法从办公室 js excel 插件内部向 http rest API 发出发布请求?
- r - 使用 ggplot2 的多条样条线 + 不同的颜色 + 线宽 + 自定义 X 轴标记
- javascript - 使用 Promise 读取文件后无法返回数据
- r - 用 pivot_wider() 替换 R 中复杂的多条件 for 循环
- asn.1 - ASN1中“enum”和“choice”类型的区别
- c# - OpenXML 电子表格文档页眉和页脚
- jquery - jQuery单击事件未在chrome中完全工作
- saxon - TinyTree.getNamespaceBindings() 失败
- keystore - 如何在databricks中生成jks密钥库文件