首页 > 解决方案 > 可以将 Graph API 身份验证令牌与 AzureRM 一起使用吗?

问题描述

我的项目的目标是能够通过 AzureRM 访问用户订阅。此应用程序将仅在默认目录中使用 - 单租户用于构建基础架构,并且正在构建为 C# 表单应用程序。

我在弄清楚如何登录用户以获取身份验证令牌以能够通过 GET 调用的授权标头时遇到问题。我目前得到的只是 401 - 未经授权。

我很好奇的是我是否需要尝试使用 AzureRM 登录我的用户(如果可能的话),或者通过 Graph API 登录是否可以,并且我在其他地方有问题需要调查。

标签: c#azure-resource-managerazure-ad-graph-api

解决方案


如何使用 AzureRM 获取访问(身份验证)令牌

您可以通过创建 Active Directory 应用程序和服务主体并使用 ClientID 和 ClientSecret 来检索 AccessToken。如何通过创建 AD、Client Id、Client Secret、Service Principal 来获取 auth 令牌,请遵循此文档以获得明确的步骤。


如何登录用户以获取身份验证令牌,以便能够通过 GET 调用的授权标头。

有 2 种方法可以传递令牌,通过HTTP authorization headerVia the addition of a URL query parameter with "token=tokenvalue."

在这里,您使用的是授权标头方式!

您可以从 Microsoft 身份平台请求 OAuth 2.0 访问令牌。Azure AD 对运行应用程序的安全主体(用户、组或服务主体)进行身份验证。如果身份验证成功,Azure AD 会将访问令牌返回给应用程序,然后应用程序可以使用访问令牌对请求进行授权。


我目前得到的只是 401 - 未经授权。

Azure AD 颁发了两种访问令牌。

  1. delegate-token - 用于委托用户操作用户的资源。

  2. 应用程序令牌 - 通常用于对所有组织的资源执行操作,此令牌中没有用户上下文(当前用户)。所以我们不应该使用这个令牌来执行 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 令牌 的步骤: 以下是我到目前为止所做的步骤:

  1. ADB2C/AAD 目录
  2. Web 应用程序在其中注册了 OpenID 并具有在此链接后管理 AD 中的用户所需的权限
  3. 当管理员登录时,受信任模式下的 Web 应用程序可以让他管理用户(创建/添加/等...)
  4. 现在我要使用的是 MS 图 (graph.microosoft.com) 的 InvitationManager 部分,以便能够发送邀请邮件。我可以兑换在 OpenIdConnectAuthenticationNotifications 中收到的代码以获取 MS 图的访问令牌吗?知道我已经这样做了,但对于 AD 图 (graph.windows.net)

注意:更新您的应用程序清单以将 Microsoft Graph 作为资源包含并请求所需的权限。


推荐阅读