【问题标题】:Getting Access Token for Microsoft Graph from asp.net core2 Authentication web app从 asp.net core2 Authentication Web 应用程序获取 Microsoft Graph 的访问令牌
【发布时间】:2017-10-09 15:43:01
【问题描述】:

我创建了一个新的 asp.net core 2 Web 应用程序。我正在使用个人用户帐户并添加了我的 Microsoft 帐户以进行外部身份验证。所有这些都按预期工作。

现在我想使用 Microsoft Graph 来读取我的 .live 个人资料并最终读取我的邮箱和类似的东西。

我创建了一个身份验证提供程序,并且能够取回访问令牌,但是为什么我尝试使用访问令牌,虽然我的 clientId 和密码输入正确,但我收到了 Authorization_IdentityNotFound 错误。

我认为这是因为我没有使用正确的参数来请求访问令牌。我想我错过了登录 .live 帐户时通常返回的授权响应代码。

有谁知道如何检索该响应代码或在 asp.net core2 中有一个工作示例。我能找到的唯一示例是在 .net core 1.1 中,从那时起情况发生了巨大变化。

【问题讨论】:

  • 一些示例代码和有关您如何注册的详细信息会有所帮助
  • 我创建了一个 IAuthenticationprovider AuthenticationContext ac = new AuthenticationContext("login.microsoft.com/common/oauth2/v2.0/token");
  • 我创建了一个 IAuthenticationprovider AuthenticationContext ac = new AuthenticationContext("login.microsoft.com/common/oauth2/v2.0/token"); ClientCredential creds = new ClientCredentials(cid, secret); authenticationresult ar=await ac.acquiretokenasync("graph.microsoft.com/",creds); request.headers.authorization = new system.net.http.headers.authenticationheadervalue("bearer",ar.accesstoken);然后我提出请求:client.users["..."].request().getasync();

标签: microsoft-graph-api asp.net-core-2.0


【解决方案1】:

您在这里混淆了几个不同的系统。

为了访问 Microsoft Graph API,您需要在调用的 authorization 标头中传递 访问令牌。这用于向 Microsoft Graph 提供您的标识以及您的数据存储位置(您是租户)。

实际的访问令牌不是由 Microsoft Graph 颁发的,它是由你的租户颁发的。对于工作/学校帐户,这是您的帐户所在的 Azure Active Directory 租户。对于个人帐户,这是 Outlook.com 租户。

在接收访问令牌之前,您首先检索授权码。在您输入凭据后,这将返回到您传递给 login.microsoftonline.comredirect_url。然后,您的应用会采用此授权代码并将其换成您将用于调用 Microsoft Graph 的 访问令牌

如果您正在寻找authentication library 来处理此过程,您应该使用MSAL.NET。您可以在 GitHub 上的 microsoft-authentication-library-for-dotnet 存储库中找到使用此库的说明。

获得令牌后,您可以直接调用 Microsoft Graph,也可以利用 Microsoft Graph Client Library for .NET

【讨论】:

  • 谢谢你,Marc,因为我没有足够的声誉,所以很难发布所有代码。我知道从哪里获取访问令牌,我现在从 azure 获取它,但可能需要从 outlook.com 获取它(网址是什么?)。您说得对,我需要检索授权码,但这就是问题所在……我不知道该怎么做!我有一个注册到 /signin-microsoft 的回调,但这是核心库的内部。我会看一下 MSAL.NET,我只是希望在 asp.net 核心中没有这么多抽象
  • 查看massivescale.com/microsoft-v2-endpoint-primer,了解 v2 Endpoint 的工作原理以及身份验证所需的调用。
  • 再次感谢 Marc,我现在更了解流程了。但这并没有让我更接近于准确理解如何获取授权码。有机会为我提供一些代码吗?
  • 您只需将用户与您的应用参数一起重定向到https://login.microsoftonline.com/common/oauth2/v2.0/authorize,它就会通过redirect_uri将授权码返回给您的应用。
  • 嗨,Marc,感谢您一直以来的耐心等待,但这并不是那么简单。如前所述,登录被重定向 /signin-Microsoft。我在代码中的任何地方都找不到这个“东西”,我也无法更改它。我用这个docs.microsoft.com/en-us/aspnet/core/security/authentication/… 来设置它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 2017-04-11
相关资源
最近更新 更多