可以将 Graph API 身份验证令牌与 AzureRM 一起使用吗?

Can you use a Graph API auth token with AzureRM?

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

我 运行 遇到了关于如何登录用户以获取身份验证令牌以便能够通过 GET 调用的授权 header 的问题。我目前得到的只是 401 - 未经授权。

我很好奇的是,我是否需要尝试使用 AzureRM 登录我的用户(如果可能的话),或者通过 Graph API 登录是否正常,我在其他地方遇到了问题我需要调查一下。

How to get the access (auth) token using the AzureRM

您可以通过创建 Active Directory 应用程序和服务主体并使用 ClientID 和 ClientSecret 来检索 AccessToken。 如何通过创建 AD、Client Id、Client Secret、Service Principal 来获取授权令牌,请按照此 documentation 进行清晰的步骤。


how to login a user to get the auth token to be able to pass through the authorization header of the GET call.

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

这里你使用的是授权头方式!

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


All I currently get is a 401 - Unauthorized.

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

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

  2. application token - 通常用于对所有组织的资源执行操作,此令牌中没有用户上下文(当前用户)。所以我们不应该使用这个令牌来执行资源,因为 me 需要用户上下文。

要使用应用程序令牌操作资源,我们需要使用用户集合指定用户,如下代码:

string userId = "";
var user = graphserviceClient.Users[userId].Request().GetAsync().Result;

要从 Azure 活动目录中读取来自用户的资源,我们需要授予该应用程序 User.Read.All; Directory.Read.All; 权限。请检查 Azure 门户上的权限以确保您已授予足够的权限。您可以在修改权限

后通过从 this site 解码令牌来检查这些权限

whether I need to be trying to login my user using AzureRM (if that is possible) or if a login through Graph API is fine

如果您的资源是“https://graph.microsoft.com/" then your authority should be "https://login.windows.net/common/oauth2/v2.0/token”或相同的权限,但将“common”换成您的 azure AD 租户 ID。

授权令牌的步骤: 所以这里是我到目前为止完成的步骤:

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

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