Microsoft Graph API redirect_uri不允许查询字符串

时间:2018-05-07 15:24:33

标签: oauth-2.0 azure-active-directory microsoft-graph

我们正在尝试从旧的WindowsLive API迁移到新的Microsoft Graph API。在此过程中,我们在应用中遇到了所需的OAuth 2.0 redirect_uri参数问题。

根据Oauth 2.0 RFCredirect_uri必须是绝对路径,但可以包含正确编码的查询字符串。

在我们的Windows应用中,我们设置了绝对路径 - 他们的应用工具不允许添加查询字符串:https://example.com/index.php

我们制作的OAuth请求使用带有网址编码的redirect_uri,包括查询参数。这是必要的,我们使用CMS(Joomla),需要知道应该处理请求的内容:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
 response_type=code&
 client_id={string}&    
 redirect_uri=https%3A%2F%2Fexample.com%2Findex.php%3Foption%3Dcom_jfbconnect%26task%3Dauthenticate.callback%26provider%3Dwindowslive&
 scope=user.read&
 state={string}&
 access_type=offline&
 approval_prompt=auto

但是,Graph API拒绝这一点:

  

"请求中指定的回复网址与为应用程序配置的回复网址不匹配"

其他人遇到此问题或理解为什么Graph API不会在应用配置或令牌请求中接受查询参数?

编辑 - 5/8 - 但是,应用程序设置区域允许redirect_uri设置中的查询字符串,这根据RFC是正确的。但是,Graph API并不尊重RFC的这一说明:

The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component ([RFC3986] Section 3.4), which MUST be retained when adding additional query parameters.

1 个答案:

答案 0 :(得分:2)

这实际上并未被Microsoft Graph拒绝。 Microsoft Graph只是一个API,它不会生成或管理访问令牌。该过程由Azure Active Directory处理。

您收到的错误是由于https://apps.dev.microsoft.com未在您的应用注册中配置redirect_uri。 URL必须与注册中配置的URL明确匹配。来自documentation

  

您应用的redirect_uri,您的应用可以发送和接收身份验证响应。它必须完全匹配您在门户网站中注册的重定向URI之一,但必须进行url编码。

对于需要传递数据的场景,您应该在state参数中对这些值进行编码。这将与授权代码一起返回到您的重定向URI。

另请注意,access_type=offlineapproval_prompt=auto都不是有效的查询参数:

  • 要检索refresh_token,请将offline添加到范围列表(user.read+offline)。
  • 要设置用户收到的提示类型,请使用prompt参数。有效选项包括loginnoneconsent