【问题标题】:Unable to locate the refresh token with Microsoft Graph无法使用 Microsoft Graph 找到刷新令牌
【发布时间】:2017-09-06 20:28:01
【问题描述】:

我正在查看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 吗?

更新

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

【问题讨论】:

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


    【解决方案1】:

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

    希望对你有帮助,

    【讨论】:

    【解决方案2】:

    微软提供TokenCacheHelper的示例代码。

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

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

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

    更多细节在对话here。部分:

    至于帮你实现token缓存,存储token缓存的内容, 你需要:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-10-26
        • 1970-01-01
        • 2021-05-13
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多