0

我正在尝试使用 OAuth2 访问 Office365 REST API:http: //msdn.microsoft.com/en-US/library/office/dn605901.aspx

我遵循了此处描述的所有步骤:http: //blogs.msdn.com/b/exchangedev/archive/2014/03/25/using-oauth2-to-access-calendar-contact-and-mail-api-in-交换-online-in-office-365.aspx

我有一个用于资源“ https://outlook.office365.com/”的 OAuth2 令牌,但是当我尝试访问 API 时出现以下错误:

"The token has invalid value 'roles' for the claim type ''."

我成功地设法使用相同的逻辑访问 Windows Azure AD“图形”API,并且我在文档中的任何地方都没有看到任何与“声明”相关的内容。我错过了什么吗?

到目前为止,我已经尝试在授权 uri 中添加或删除 prompt=admin_consent ,这会触发来自微软的正确对话框,但这并没有改变任何东西。

我正在向以下端点发送请求:

https://outlook.office365.com/EWS/OData/Me/Inbox/Messages

这是原始响应:

HTTP/1.1 401 Unauthorized
Cache-Control: private
Server: Microsoft-IIS/8.0
request-id: b5b3df59-c23d-4a47-83b7-79c2f7ed6211
Set-Cookie: ClientId=OGLQDFMY0KPSRZSMJBA; expires=Fri, 07-Aug-2015 14:00:33 GMT; path=/; HttpOnly
X-CalculatedBETarget: dm2pr0701mb1216.namprd07.prod.outlook.com
x-ms-diagnostics: 2000001;reason="The token has invalid value 'roles' for the claim type ''.";error_category="invalid_token"
X-DiagInfo: DM2PR0701MB1216
X-BEServer: DM2PR0701MB1216
X-AspNet-Version: 4.0.30319
Set-Cookie: exchangecookie=17695b411d96429b9a2e2db37905b856; expires=Fri, 07-Aug-2015 14:00:35 GMT; path=/; HttpOnly
Set-Cookie: X-BackEndCookie=OrganizationAnchor@cleverage.onmicrosoft.com=u56Lnp2ejJqBnZqdm8zIm8bSzMnNyNLLz52a0sfGx8zSy8nHm53Myc+anMqcgZyTmomajZ6YmtGQkZKWnI2QjJCZi9GckJKBzc/Oy9LPxtLPyavOy8XPz8XMyg==; expires=Sat, 06-Sep-2014 14:00:35 GMT; path=/EWS; secure; HttpOnly
X-Powered-By: ASP.NET
X-FEServer: AMSPR02CA0019
WWW-Authenticate: Bearer client_id="00000002-0000-0ff1-ce00-000000000000", trusted_issuers="00000001-0000-0000-c000-000000000000@*", authorization_uri="https://login.windows.net/common/oauth2/authorize", error="invalid_token",Basic Realm="",Basic Realm=""
Date: Thu, 07 Aug 2014 14:00:34 GMT
Connection: close
Content-Length: 0

仅供参考,我正在使用 OAuth 的“lusitanian/oauth”库开发一个 Symfony2 应用程序,并进行一些调整以连接到 Azure AD。

我将非常感谢任何人可以提供的帮助:)

[编辑]

顺便说一句,该 API 可以与 Basic HTTP Auth 一起正常工作,但它会迫使我将所有用户的密码以明文形式存储在我的数据库中,这非常可怕。

Azure 后端中 Office 365 Exchange Online 的委派权限设置为 3(读取联系人、日历和邮件)

4

2 回答 2

0

非常感谢您的回答,Exchange 和 Sharepoint 的权限都设置为在 Azure 后端列出和读取,所以应该没问题...

我解码了令牌并得到了:

{
 "typ": "JWT",
 "alg": "RS256",
 "x5t": "kriMPdmBvx68skT8-mPAB3BseeA"
}.
{
 "aud": "https://outlook.office365.com/",
 "iss": "https://sts.windows.net/<tenant>/",
 "iat": 1407766971,
 "nbf": 1407766971,
 "exp": 1407770871,
 "ver": "1.0",
 "tid": "<tenant>",
 "oid": "996481f3-9769-4e02-ab1c-8c4c006da659",
 "sub": "996481f3-9769-4e02-ab1c-8c4c006da659",
 "idp": "https://sts.windows.net/<tenant>/",
 "appid": "<client>",
 "appidacr": "1"
}

它看起来并不像我们预期的那样。

我有一些想法要测试,我会发布结果。

[编辑]

我使用 Graph API 获得的令牌看起来相同,并且工作正常:

{
    "aud": "https://graph.windows.net/",
    "iss": "https://sts.windows.net/<tenant>/",
    "iat": 1407767341,
    "nbf": 1407767341,
    "exp": 1407771241,
    "ver": "1.0",
    "tid": "<tenant>",
    "oid": "996481f3-9769-4e02-ab1c-8c4c006da659",
    "sub": "996481f3-9769-4e02-ab1c-8c4c006da659",
    "idp": "https://sts.windows.net/<tenant>/",
    "appid": "<client>",
    "appidacr": "1"
}

所以令牌似乎没有权限。

于 2014-08-11T15:01:34.637 回答
0

在 Azure AD 中注册应用时,是否为 Office 365 Exchange Online 添加了权限?您是否设置了应用程序权限或委托权限?(UI 不应显示任何可用的应用程序权限,因为它们尚不受支持,但只是为了确定......)。原因是应用程序权限通常在令牌中显示为“角色”,而委派权限在令牌中显示为“scp”。

另外,您可以解码您的访问令牌并与此示例进行比较吗?您可以使用http://jwt.calebb.net/从返回的 base64 编码令牌中进行快速解析。如果你卡住了,你可以在这里发布,但请先删除客户端 ID、租户 ID 和用户信息!我只想查看结构,以及您的 aud 和 scp 值(如果存在)。它应该看起来像:

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "kriMPdmBvx68skT8-mPAB3BseeA"
}

{
  "aud": "https://outlook.office365.com/",
  "iss": "https://sts.windows.net/<tenant_id>/",
  "iat": 1407344872,
  "nbf": 1407344872,
  "exp": 1407348772,
  "ver": "1.0",
  "tid": "<your tenant_id>",
  "amr": [
    "pwd"
  ],
  "oid": "169bf758-9811-4f6a-b924-80c6bbd4ad92",
  "upn": <user_email>,
  "unique_name": <user_email>,
  "sub": "2n3Mq5HtdCN1WVQk494lPipvfVxeSZCYATOpWyN92iA",
  "puid": "10037FF56F8936F7",
  "family_name": "Chaves",
  "given_name": "Mack",
  "appid": "<your client_id>",
  "appidacr": "0",
  "scp": "Contacts.Write Calendars.Write Mail.Send Mail.Write",
  "acr": "1"
}

如果看起来不同,则说明您的应用注册存在问题。确保您遵循http://msdn.microsoft.com/EN-US/library/office/dn605894(v=office.15).aspx中的步骤,特别是“在 Azure AD 中手动注册您的 Web 应用”, “获取应用程序密钥”和“配置 API 权限”部分(在您的情况下使用 Exchange 而不是 SharePoint)。

编辑

登录到https://manage.windowsazure.com并导航到您的应用程序。选择您的应用后,单击底部的管理清单按钮,然后选择下载清单。用文本编辑器打开它。只发布名为“requiredAppPermissions”的部分,我会对照我的进行检查。

于 2014-08-08T01:09:52.787 回答