【问题标题】:Azure : How to i get the Refresh Token ? using Curl when the Output of the connection only gives Access TokenAzure:如何获得刷新令牌?当连接的输出仅提供访问令牌时使用 Curl
【发布时间】: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"
}

由于输出没有刷新令牌(我如何获得它)

请提供任何可能的见解

【问题讨论】:

    标签: azure authentication curl access-token refresh-token


    【解决方案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 实现)stackoverflow.com/questions/43340580/…
      • 非常感谢 Juunas & Tony ju & Rohit Saigal
      • @juunas 在我的场景中,用户参与其中。而且我无法每小时都重定向到网页。所以,我需要一个刷新令牌。知道我们如何实现它吗?
      • 您使用的是哪个流程?如果是隐式的,您可以使用 MSAL.js 自动刷新令牌。
      猜你喜欢
      • 2020-07-12
      • 2020-02-26
      • 2015-07-19
      • 2018-01-15
      • 2019-06-29
      • 2014-09-13
      • 2022-12-23
      • 2016-03-13
      相关资源
      最近更新 更多