0

我在这里寻找有关刷新令牌的信息。

我有这个代码来获取访问令牌:

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吗?

更新

根据文档,答案中建议的范围默认情况下是打开的?

在此处输入图像描述

4

3 回答 3

0

我相信在使用 MSAL(和 v2 auth 端点)时,默认情况下您不会获得刷新令牌。要获取刷新令牌,您需要请求offline_access范围以及其他范围。有关更多详细信息,请参阅https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference#openid-permissions

希望这可以帮助,

于 2017-09-06T21:35:59.700 回答
0

Microsoft 为TokenCacheHelper提供示例代码。

将其添加到您的项目并提供它的实例。然后,设置路径。像这样:

TokenCacheHelper.CacheFilePath = Program.Options.TokenCachePath;
PublicClientApp = new PublicClientApplication(_AppID, "https://login.microsoftonline.com/common", TokenCacheHelper.GetUserCache());

这就是你需要做的。缓存文件包含所有令牌详细信息,包括刷新令牌。

更多细节在此处的对话中。部分:

至于帮助您实现令牌缓存,要存储令牌缓存的内容,您需要:

  1. TokenCacheHelper从此处复制到您的项目。
  2. 如果你真的想把缓存的内容保存到注册表,改变实现:
    • AfterAccessNotification写入注册表而不是此行的文件
    • BeforeAccessNotification从注册表而不是文件中读取这一行
  3. 如此处所示构建 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());

于 2017-09-19T11:47:25.150 回答
0

对我来说,我的问题是使用旧版本的Microsoft.Identity.Clientnuget 包。从 升级4.35.14.40.0修复了令牌错误。

于 2022-02-21T17:46:46.957 回答