我正在尝试使用Azure AD将用户登录到我的应用程序中,但是我无法在服务器上获得offline_access权限(作用域)。
我的最初要求是:
https://login.microsoftonline.com/{tenant}/oauth2/authorize?client_id={client_id}&response_type=code&redirect_uri=https%3A%2F%2Fservice%2Emyserver%2Ecz&scope=user.read%20openid%20profile%20offline_access&response_mode=form_post&state=azure_login
如您所见,我要求输入user.read
,openid
,profile
和offline_access
。但是当我获得令牌时,响应为:
{
"token_type": "Bearer",
"scope": "profile openid email User.Read",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "ey...",
"id_token": "ey..."
}
首先,我没有要求发送电子邮件,其次没有refresh_token
和expires_on
。
最有趣的是,如果我在计算机上本地运行应用程序(redirect_uri为http://localhost:8080),则会得到完全不同的响应:
{
"token_type": "Bearer",
"expires_in": "3599",
"ext_expires_in": "3599",
"expires_on": "1568980038",
"access_token": "AQ...",
"refresh_token": "AQ...",
"id_token": "ey..."
}
我在本地有offline_access
权限,另一方面,我没有任何其他权限。例如,我无法从http://localhost:8080访问https://graph.microsoft.com/v1.0/me
。
要在服务器上获得offline_access
权限,我该怎么做?
答案 0 :(得分:0)
好,我终于找到了。整个问题是由API的组合引起的。有以下链接:
https://login.microsoftonline.com/{tenant}/oauth2/authorize
https://login.microsoftonline.com/{tenant}/oauth2/token
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
我忽略了“ v2.0”并将其混合在一起。