Azure:如何获取刷新令牌?当连接的输出仅提供访问令牌时使用Curl

Azure:如何获取刷新令牌?当连接的输出仅提供访问令牌时使用Curl,azure,authentication,curl,access-token,refresh-token,Azure,Authentication,Curl,Access Token,Refresh Token,我无法使用Azure服务主体(使用客户端ID和客户端机密)获取刷新令牌 请帮助我通过CURL获取刷新令牌以及如何使用它 当我在Windows CMD提示符下运行下面的CURL命令时,我获得了访问令牌。然而,我没有得到刷新令牌随着它 我是不是遗漏了什么 输入: curl -X POST https://login.microsoftonline.com/12345/oauth2/token ^ -F grant_type=client_credentials ^ -F resource=https

我无法使用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"
}
由于输出没有刷新令牌(如何获取它)


请请求提供任何可能的见解

将授权类型更改为“密码”,并在请求中添加用户名和密码

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=******
您将能够获得刷新令牌

{
"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_令牌来进行更新。

您不会获得具有客户端id和密码的refresh令牌。这没有道理。只有当用户参与时,刷新令牌才有意义。因此,它允许您获得新令牌,而无需提示用户再次登录


您不需要刷新令牌。您可以在需要时获得具有客户端id和密码的新令牌

我认为@juunas是正确的。请注意,您正在使用
client\u凭据
作为
grant\u类型
。如果您真的对基于刷新的令牌有效的基于用户的流感兴趣,请考虑这里所描述的授权代码流。另一方面,这里是另一个SO线程,它简单地从OAuth的角度(不具体是Azure AD的实现)讨论客户端凭据授予和刷新令牌。非常感谢Juunas&Tony ju&RohitSaigal@juunas在我的场景中,用户参与其中。我不能每小时重定向到网页。所以,我需要一个刷新令牌。知道我们如何实现吗?您使用的是哪种流?如果是隐式的,您可以使用MSAL.js自动刷新令牌。