尽管文档说明您始终请求令牌,但您将收到刷新令牌,因此在请求令牌时我们没有收到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
刷新令牌
当客户端获取访问令牌以访问受保护的资源时,客户端还将收到刷新令牌。
答案 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...",
}