Azure:如何获得刷新令牌?当连接的输出仅提供访问令牌时使用 Curl
Posted
技术标签:
【中文标题】Azure:如何获得刷新令牌?当连接的输出仅提供访问令牌时使用 Curl【英文标题】:Azure : How to i get the Refresh Token ? using Curl when the Output of the connection only gives Access Token 【发布时间】:2019-08-29 06:48:20 【问题描述】:我无法使用 Azure 服务主体(使用客户端 ID 和客户端密码)获取刷新令牌
请帮助我通过 CURL 获取刷新令牌以及如何使用它。
当我在 Windows CMD 提示符中运行以下 CURL 命令时,我得到了访问令牌。而我没有得到刷新令牌。
我在这里错过了什么吗?
输入:
curl -X POST https://login.microsoftonline.com/12345/oauth2/token ^
-F grant_type=client_credentials ^
-F resource=https://management.core.windows.net/ ^
-F client_id=12345-abcde ^
-F client_secret=12345abcde
输出:
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "3600",
"expires_on": "1554368330",
"not_before": "1554364430",
"resource": "https://management.core.windows.net/",
"access_token": "XXXXXXXXXXXXX"
由于输出没有刷新令牌(我如何获得它)
请提供任何可能的见解
【问题讨论】:
【参考方案1】:将grant_type 更改为'password',在请求中添加用户名和密码。
curl -X POST https://login.microsoftonline.com/12345/oauth2/token ^
-F grant_type=password ^
-F resource=https://management.core.windows.net/ ^
-F client_id=12345-abcde ^
-F client_secret=12345abcde ^
-F username=user@XX.onmicrosoft.com ^
-F password=******
您将能够获得 refresh_token。
"token_type": "Bearer",
"scope": "User.ReadWrite.All",
"expires_in": "3600",
"ext_expires_in": "3600",
"expires_on": "1554711949",
"not_before": "1554708049",
"resource": "https://management.core.windows.net/",
"access_token": "******",
"refresh_token": "******"
您可以将 refresh_token 用于refresh the access token。
【讨论】:
【参考方案2】:您不会获得带有客户端 ID 和密码的刷新令牌。这没有意义。刷新令牌仅在涉及用户时才有意义。因为它允许您在不提示用户再次登录的情况下获取新令牌。
您不需要刷新令牌。您可以根据需要获取带有客户端 ID 和密码的新令牌。
【讨论】:
我认为@juunas 是正确的。请注意,您使用client_credentials
作为grant_type
。如果您真的对刷新令牌有效的基于用户的流程感兴趣,请考虑此处描述的授权代码流程.. docs.microsoft.com/en-us/azure/active-directory/develop/… .. 在旁注中,这是另一个讨论客户端凭据授予和刷新的 SO 线程仅从 OAuth 的角度来看的令牌(不是专门的 Azure AD 实现)***.com/questions/43340580/…
非常感谢 Juunas & Tony ju & Rohit Saigal
@juunas 在我的场景中,用户参与其中。而且我无法每小时都重定向到网页。所以,我需要一个刷新令牌。知道我们如何实现它吗?
您使用的是哪个流程?如果是隐式的,您可以使用 MSAL.js 自动刷新令牌。以上是关于Azure:如何获得刷新令牌?当连接的输出仅提供访问令牌时使用 Curl的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Postman 获取 Azure AD 刷新令牌?