我怎样才能获得刷新令牌

how can I get refresh token

我学习了这段代码示例:https://github.com/Azure-Samples/active-directory-dotnet-graphapi-web,是的,我可以在 AuthorizationCodeReceived 中获取访问令牌: AuthenticationHelper.token = result.AccessToken;

但是我如何获得刷新令牌?result.RefreshToken 不可用,那么我如何使用 acquiretokenbyrefreshtoken 函数?

https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.clients.activedirectory.authenticationcontext.acquiretokenbyrefreshtoken.aspx

ADAL 2.X 中提供了 acquiretokenbyrefreshtoken 函数,该代码示例使用的是 ADAL 3.13.8,并且从 ADAL3.X 开始,库将不会公开刷新令牌和 AuthenticationContext.AcquireTokenByRefreshToken 函数.

ADAL 缓存刷新令牌,并会在您调用 AcquireToken 并且请求的令牌需要更新时自动使用它(即使您想为不同的资源获取新的访问令牌)。

有关 ADAL 刷新令牌的更多详细信息,请参阅 here . Also click here and here 的说明。

如果您正在寻找持久机制,您可以简单地使用 TokenCache.Serialize()

这是我的做法:

首先,获取令牌并序列化缓存令牌

AuthenticationContext authContext = new AuthenticationContext($"https://login.microsoftonline.com/{Tenant}");
var authResult = authContext.AcquireTokenAsync(resource, ClientId, new Uri("https://login.microsoftonline.com/common/oauth2/nativeclient"), new PlatformParameters(PromptBehavior.SelectAccount)).Result;
byte[] blobAuth = authContext.TokenCache.Serialize();

然后,加载缓存的字节

AuthenticationContext authContext = new AuthenticationContext($"https://login.microsoftonline.com/{tenant}/");
authContext.TokenCache.Deserialize(blobAuth);
var res = authContext.AcquireTokenSilentAsync(resource, clientId).Result;