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 刷新令牌?

eBay oauth 令牌和刷新令牌

使用刷新令牌和访问令牌如何比仅使用 1 个 JWT 更“安全”?

Azure MSI 强制令牌刷新

请求 Azure 应用服务身份验证刷新令牌

服务主体的Azure AD OIDC ID令牌