无法使用Microsoft Graph找到刷新令牌

时间:2017-09-06 20:28:01

标签: c# microsoft-graph msal refresh-token

我正在寻找关于刷新令牌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?

更新

根据文档,答案中建议的范围默认开启?

enter image description here

2 个答案:

答案 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。部分:

  

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

     
      
  1. TokenCacheHelper从此处复制到您的项目中。
  2.   
  3. 如果您确实要将缓存内容保存到注册表中,   改变执行:      
        
    • AfterAccessNotification写信给   注册表而不是文件this line
    •   
    • BeforeAccessNotification阅读   从注册表而不是文件this line
    •   
  4.   
  5. 构建   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());

  6.