我正在寻找关于刷新令牌的here。
我有这个代码来获取访问令牌:
if(bPromptUser)
{
_AuthResult = await PublicClientApp.AcquireTokenAsync(_scopes); //Opens Microsoft Login Screen
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(keyName))
{
key.OpenSubKey(keyName, true);
key.SetValue("Status", _AuthResult.AccessToken);
key.SetValue("Expire", _AuthResult.ExpiresOn.ToLocalTime().ToString());
key.Close();
token = _AuthResult.AccessToken;
}
// Append the access token to the request.
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
}
但我的_AuthResult
在列表中实际上没有RefreskToken
。这是因为我使用 Microsoft Graph 的v1?
根据文档,答案中建议的范围默认开启?
答案 0 :(得分:0)
我相信在使用MSAL(以及v2 auth端点)时,默认情况下您没有获得刷新令牌。要获取刷新令牌,您需要请求offline_access
范围以及其他范围。有关详细信息,请参阅https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference#openid-permissions。
希望这有帮助,
答案 1 :(得分:0)
Microsoft提供TokenCacheHelper的示例代码。
将其添加到您的项目并提供它的实例。然后,设置路径。像这样:
TokenCacheHelper.CacheFilePath = Program.Options.TokenCachePath;
PublicClientApp = new PublicClientApplication(_AppID, "https://login.microsoftonline.com/common", TokenCacheHelper.GetUserCache());
这就是你需要做的一切。缓存文件包含所有令牌详细信息,包括刷新令牌。
更多详情请参阅对话here。部分:
至于帮助您实现令牌缓存,存储令牌缓存的内容, 你需要:
- 将TokenCacheHelper从此处复制到您的项目中。
- 如果您确实要将缓存内容保存到注册表中, 改变执行:
- 醇>
构建
PublicClientApplication
如此处所示(传递缓存即你) 通过致电TokenCacheHelper.GetUserCache()
得到: https://github.com/Azure-Samples/active-directory-dotnet-desktop-msgraph-v2/blob/master/active-directory-wpf-msgraph-v2/App.xaml.cs#L19:
clientApp = new PublicClientApplication(ClientId, "https://login.microsoftonline.com/common", TokenCacheHelper.GetUserCache());