【问题标题】:Office365 REST API. Getting a 401 (Unauthorized) using ADALOffice365 REST API。使用 ADAL 获取 401(未经授权)
【发布时间】:2015-04-15 12:53:18
【问题描述】:

我正在尝试使用 ADAL 库访问 Office365 REST API,但得到 401(未经授权),但不知道原因。我已经在我们的 Azure AD 中注册了一个应用程序,获得了一个 ID,为它获取了一个密钥,并授予它读取 Windows Azure Active Directory 的权限。

我能够获取 OAuth 令牌,但它无法与 Office365 API 一起使用。

这是我失败的尝试之一:

  AuthenticationContext auth = new AuthenticationContext("https://login.windows.net/" + myTenant);
  AuthenticationResult authenticationResult = auth.AcquireToken("http://Rest", new ClientCredential(myId, myKey));
  HttpClient client = new HttpClient();
  client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);
  HttpResponseMessage msg = await client.GetAsync("https://outlook.office365.com/api/v1.0/me/events");
  // => Bam. 401. :(

有什么想法吗?

【问题讨论】:

    标签: office365 adal outlook-restapi


    【解决方案1】:

    您传递给 AcquireToken 的资源 ID 无效。那应该是"https://outlook.office365.com/"。看看是否有帮助。如果没有,请尝试解析您的令牌并查找问题:https://github.com/jasonjoh/office365-azure-guides/blob/master/ValidatingYourToken.md

    【讨论】:

    • 谢谢!正确的资源没有帮助,但是您的令牌解析器向我显示登录的用户标签(upn、unique_name、family_name、given_name)和 - 可能更糟糕的是 - 权限标签(scp :) 标签都丢失了。显然我在这里遗漏了一些东西。但是什么?
    • 您可以尝试在 AuthenticationContext 的构造函数中使用常见的 OAuth 端点“login.windows.net/common”。另外,当您注册您的应用程序时,您是否指定了应用程序权限或委托权限?你给了它什么权限?
    • Jason,很抱歉回复晚了,也很抱歉用这些乏味的东西打扰您。请随意忽略我。公共端点抱怨我的应用程序不存在。我尝试设置每个应用程序并委托权限。还是 401 :(.
    • 杰森。我发现了这一点,隐藏在 http 响应中:“访问令牌是使用身份验证方法获取的,该身份验证方法太弱,无法访问此应用程序。提供的身份验证强度为 1,要求为 2”。我想这就是我要走的路。我会不断更新这篇文章。
    • 好的。从那个错误来看,听起来您正在尝试执行客户端凭据身份验证流程,这需要身份验证强度为 2。这要求您使用证书而不是客户端密码进行身份验证。客户端凭据身份验证流程更适用于需要访问组织中所有邮箱的服务应用程序。如果您只是尝试访问已登录用户的邮箱,则应使用代码授权流程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多