Office 365 多租户 OAuth2 应用程序不显示同意屏幕
Office365 Multitenant OAuth 2 App Displays no consent screen
我正在开发一个我希望成为多租户的 Office 365 应用程序:也就是说,我希望该应用程序能够访问来自其他组织的用户的访问交换数据。到目前为止,我已经能够代表所需的第三方用户创建一个 OAuth 2 访问令牌,但是没有向用户显示任何同意屏幕并且 API 请求失败并显示 401 Unauthorized error containing the following header :
< x-ms-diagnostics: 2000001;reason="No applicable user context claims found.";error_category="invalid_token"
更详细地说,我做了以下工作。我已经创建并配置了 Azure AD 应用程序。我已将应用程序配置为多租户,并添加了 AAD 访问以及交换和共享点访问的委派权限。使用此应用程序的端点,我代表第三方用户发出 OAuth 2 授权请求。此请求成功但未显示任何同意屏幕,返回访问代码 [1]。随后的访问令牌请求也成功 [2]。访问令牌请求中请求的资源是https://outlook.office365.com,成功的访问令牌响应包含Mail.Read范围。此时,代表第三方用户 [3].
的邮件 API 请求(例如,为用户列出消息)失败
设置可供其他组织中的用户使用的适当多租户应用程序需要什么?
[1]
第三方授权码请求:
https://login.windows.net/<uid>/oauth2/authorize?api-version=1.0&client_id=<client id>&response_type=code&resource=https://outlook.office365.com/
重定向到:
http://localhost:3000/?code=<access code>&session_state=e9ba65e1-860e-41ab-b3d4-7af64d54135e
其中 localhost:3000 是我为应用程序配置的回复 URL
[2] 访问令牌请求:
curl -X POST https://login.windows.net/<uid>/oauth2/token \
-F redirect_uri=http://localhost:3000 \
-F grant_type=authorization_code \
-F resource=https://outlook.office365.com \
-F client_id=<id> \
-F client_secret=<secret> \
-F code=<auth code above>
回复:
200 行
{
"access_token": "<token>",
"expires_in": "3599",
"expires_on": "1421092817",
... "resource": "https://outlook.office365.com",
"scope": "Calendars.Read Calendars.Write Contacts.Read Contacts.Write full_access_as_user Mail.Read Mail.Send Mail.Write",
"token_type": "Bearer"
}
[3] API 请求:
curl -v https://outlook.office365.com/api/v1.0/me \
-H "Authorization: Bearer <access token>"
回复:
< HTTP/1.1 401 Unauthorized
* Server Microsoft-IIS/8.0 is not blacklisted
< Server: Microsoft-IIS/8.0
< request-id: 4b30a79a-ee3d-4bac-856c-2b1cce9c4043
< Set-Cookie: ClientId=ZILVUOFNNUSPO455YJRBCW; expires=Tue, 12-Jan-2016 18:27:47 GMT; path=/; secure; HttpOnly
< x-ms-diagnostics: 2000001;reason="No applicable user context claims found.";error_category="invalid_token"
< X-Powered-By: ASP.NET
< X-FEServer: BN3PR0301CA0033
< 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=""
< Date: Mon, 12 Jan 2015 18:27:49 GMT
< Content-Length: 0
<
请从您的授权请求中删除 api-version=1.0 参数。它应该看起来像这样:
我正在开发一个我希望成为多租户的 Office 365 应用程序:也就是说,我希望该应用程序能够访问来自其他组织的用户的访问交换数据。到目前为止,我已经能够代表所需的第三方用户创建一个 OAuth 2 访问令牌,但是没有向用户显示任何同意屏幕并且 API 请求失败并显示 401 Unauthorized error containing the following header :
< x-ms-diagnostics: 2000001;reason="No applicable user context claims found.";error_category="invalid_token"
更详细地说,我做了以下工作。我已经创建并配置了 Azure AD 应用程序。我已将应用程序配置为多租户,并添加了 AAD 访问以及交换和共享点访问的委派权限。使用此应用程序的端点,我代表第三方用户发出 OAuth 2 授权请求。此请求成功但未显示任何同意屏幕,返回访问代码 [1]。随后的访问令牌请求也成功 [2]。访问令牌请求中请求的资源是https://outlook.office365.com,成功的访问令牌响应包含Mail.Read范围。此时,代表第三方用户 [3].
的邮件 API 请求(例如,为用户列出消息)失败设置可供其他组织中的用户使用的适当多租户应用程序需要什么?
[1]
第三方授权码请求:
https://login.windows.net/<uid>/oauth2/authorize?api-version=1.0&client_id=<client id>&response_type=code&resource=https://outlook.office365.com/
重定向到:
http://localhost:3000/?code=<access code>&session_state=e9ba65e1-860e-41ab-b3d4-7af64d54135e
其中 localhost:3000 是我为应用程序配置的回复 URL
[2] 访问令牌请求:
curl -X POST https://login.windows.net/<uid>/oauth2/token \
-F redirect_uri=http://localhost:3000 \
-F grant_type=authorization_code \
-F resource=https://outlook.office365.com \
-F client_id=<id> \
-F client_secret=<secret> \
-F code=<auth code above>
回复:
200 行
{
"access_token": "<token>",
"expires_in": "3599",
"expires_on": "1421092817",
... "resource": "https://outlook.office365.com",
"scope": "Calendars.Read Calendars.Write Contacts.Read Contacts.Write full_access_as_user Mail.Read Mail.Send Mail.Write",
"token_type": "Bearer"
}
[3] API 请求:
curl -v https://outlook.office365.com/api/v1.0/me \
-H "Authorization: Bearer <access token>"
回复:
< HTTP/1.1 401 Unauthorized
* Server Microsoft-IIS/8.0 is not blacklisted
< Server: Microsoft-IIS/8.0
< request-id: 4b30a79a-ee3d-4bac-856c-2b1cce9c4043
< Set-Cookie: ClientId=ZILVUOFNNUSPO455YJRBCW; expires=Tue, 12-Jan-2016 18:27:47 GMT; path=/; secure; HttpOnly
< x-ms-diagnostics: 2000001;reason="No applicable user context claims found.";error_category="invalid_token"
< X-Powered-By: ASP.NET
< X-FEServer: BN3PR0301CA0033
< 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=""
< Date: Mon, 12 Jan 2015 18:27:49 GMT
< Content-Length: 0
<
请从您的授权请求中删除 api-version=1.0 参数。它应该看起来像这样: