对于Microsoft OAuth 2.0 auth code grant,我们遇到了范围问题。
当我们仅 User.Read
范围时,我们的客户会被要求授予我们登录并阅读您的个人资料和的权限随时访问您的数据。我们没有说明我们需要offline_access
范围。
仅在Microsoft切换到新权限授予界面后才会发生这种情况。让其他人遇到同样的问题,或者我们做错了什么?
我们传入的response_type
仅为code
。
我已仔细检查过,我们注册的应用程序位于https://apps.dev.microsoft.com
。
我们用于授权的网址如下。
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
正如我之前所说,我们通过查询传递的唯一范围是User.Read
。
编辑3
请求网址:(我删除了客户端ID。)
https://login.microsoftonline.com:443/common/oauth2/v2.0/authorize?client_id={client_id}&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A19974%2Fapi%2Fv1%2Fmicrosoft%2Foauth2%2Fsession&response_mode=form_post&scope=User.Read&state=1527572151-IIZ0D&nonce=1527572151-IIZ0D&prompt=consent&domain_hint=organizations
使用fiddler记录的响应:
POST http://localhost:19974/api/v1/microsoft/oauth2/session HTTP / 1.1
主持人:localhost:19974
连接:保持活力
内容长度:798
缓存控制:max-age = 0
升级 - 不安全请求:1
来源:null
内容类型:application / x-www-form-urlencoded
User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 66.0.3359.181 Safari / 537.36
接受:text / html,application / xhtml + xml,application / xml; q = 0.9,image / webp,image / apng, / ; q = 0.8
Accept-Encoding:gzip,deflate,br
Accept-Language:en,en-NZ; q = 0.9,zh-TW; q = 0.8,zh; q = 0.7,zh-CN; q = 0.6
DNT:1
代码= OAQABAAIAAADX8GCi6Js6SK82TsD2Pb7rUmGhJoHUB3devvTffqTlhRhg9XZ202zgEA8B37CzgkeLNVBc4FFstw3sTjNmYhKCYLE_jcl7KeCrtYgPVFYOKUuazv_B3vHKIM8ttwIzOlV_3GL4vqxPgjvXbWUdas5Sj9Z1X9fEBB63Wa1Ig0AnisnHk6qagIimFEPApYx473RzgIve2erM3r5fnX5Q0L1-pHppSFUJoWop6MPTkUh-umPzuXQgB280rHyUds3odS6_cJP6SbI70aLNOqHV_AnaV_VUZqQ6hLfBZMVKFMYMg_r_harPOU5EE2gf2d15FIKMsmjPRTR2vryaJRyg0TblF_jr-kWyeURwpbkPzsU6r3avEqM6dfTqhhASoXB4VmeZ2zw75pZgK4v8cfcd3J_tIpFRjcEY1TqPz5E3QrYQGfFSeBEEbjwqvj2X5_4VBvve7ABdrt3OCjid8E_837mLX-Fv5t3nk_nfnV0SY6XrFQQmoPClyqSyn44FTv_WFY7Af74SfeBrWDYSSiTuwphEmVTeT6U2R4Rs4wR8G0uHW2L53U-4UbkODd -_- JZYIahAohDAF-8TaguUwb4mOK497wsFOkgpmYz-np4MX3sTweSLmn6bAOy9Y91E3o4fuERzX9m9N_HBt64cv6k8JROKJqs6cx1Gb9EoYCRLCn2ihWi_crZh2PH5LACMCLWYgH0gAA&安培;状态= 1527572151-IIZ0D&安培; session_state = 1faeaab9-0f00-45cb-a776-356463a54684
编辑4
今天,我在将项目升级到.Net Core 2.1时进行了更多测试。我注意到即使从接口确认Access your data anytime
,但是当我使用代码交换访问令牌时,它不包含刷新令牌。
我注意到的另一件事是,当我将范围作为User.Read
传递时,当我交换访问令牌时,范围返回为:User.Read User.ReadBasic.All
。这有点不一致,但不是大问题。
答案 0 :(得分:1)
将v2终结点与AAD帐户一起使用时,当前无法从初始同意屏幕中删除offline_access范围。请求令牌时,仍然仍然显式请求offline_access范围。
答案 1 :(得分:1)
这是一个issue,处于Azure Active Directory建议和反馈网站上的已计划状态。
管理员的帖子(2018年10月2日)提到了“在未来3个月内”解决此问题的计划。
答案 2 :(得分:0)
<强> Cuase:强>
对于v1端点,范围在AAD App注册中静态配置。如果您随时添加了访问用户的数据权限,您还将在请求中获得offline_access范围。
<强>解决方案:强>
如果您不想让用户拥有offline_access
权限,则可以取消Microsoft Graph委派权限中的Access user's data anytime
权限。
有关offline_access
的更多信息:
offline_access
是OpenID权限之一。它的名称是offline_access
,它在v1端点中的显示字符串是随时访问用户的数据。您可以在this documentation中查看有关此权限的更多详细信息。