AcquireTokenForClient不返回刷新令牌吗?

时间:2020-06-17 15:19:22

标签: oauth azure-active-directory

尽管文档说明您始终请求令牌,但您将收到刷新令牌,因此在请求令牌时我们没有收到refresh_token。 可能会意外丢失/误解了什么?

这是我们正在使用的一部分代码:

var app = ConfidentialClientApplicationBuilder.Create("...")
  .WithAuthority(AzureCloudInstance.AzurePublic, "...")
  .WithClientSecret(CLIENTSECRET)
  .Build();

  AuthenticationResult result = await app.AcquireTokenForClient(ewsScopes)
    .ExecuteAsync();

这是我们期望基于的文档的引用: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-configurable-token-lifetimes#refresh-tokens

刷新令牌

当客户端获取访问令牌以访问受保护的资源时,客户端还将收到刷新令牌。

1 个答案:

答案 0 :(得分:1)

您正在此处的代码中使用“客户端证书”流来获取令牌。

有关文档,请参见此处-IConfidentialClientApplication.AcquireTokenForClient(IEnumerable) Method

  AuthenticationResult result = await app.AcquireTokenForClient(ewsScopes)
    .ExecuteAsync();

在此处详细了解Client Credentials flow,尤其是在这种情况下,成功的响应是什么样的,仅期望具有access_token而没有refresh_token。

{
  "token_type": "Bearer",
  "expires_in": 3599,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBP..."
}

不同的流程,例如授权码流程(通常由网络应用程序使用),将返回access_token和refresh_token。

您可以在此处了解有关该流程和相应情况的更多信息-Authorization Code Flow

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "token_type": "Bearer",
    "expires_in": 3599,
    "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}