Asp.net core 使用Azure AD V2.0(MSAL)和Asp.Net Core 2.0获取刷新令牌

Asp.net core 使用Azure AD V2.0(MSAL)和Asp.Net Core 2.0获取刷新令牌,asp.net-core,azure-active-directory,azure-ad-graph-api,refresh-token,Asp.net Core,Azure Active Directory,Azure Ad Graph Api,Refresh Token,我已经从Azure Ad V2.0端点获得了对调用图Api的访问权。但我必须代表用户在api中执行一些操作。所以我需要刷新令牌以在访问令牌到期时续订它 有没有办法在ASP.NETCore中使用MSAL获取刷新令牌 在microsoft文档中,他们告诉我们可以通过请求/token端点来实现。但是我找不到如何使用MSAL来实现它 MSAL.NET不公开刷新令牌,而是将其保留在内部,并代表应用处理所有令牌刷新和缓存逻辑 您所指的文档是指MSAL代表您完成的协议本身。它使用授权代码(在最终用户登录后)进

我已经从Azure Ad V2.0端点获得了对调用图Api的访问权。但我必须代表用户在api中执行一些操作。所以我需要刷新令牌以在访问令牌到期时续订它

有没有办法在ASP.NETCore中使用MSAL获取刷新令牌


在microsoft文档中,他们告诉我们可以通过请求/token端点来实现。但是我找不到如何使用MSAL来实现它

MSAL.NET不公开刷新令牌,而是将其保留在内部,并代表应用处理所有令牌刷新和缓存逻辑

您所指的文档是指MSAL代表您完成的协议本身。它使用授权代码(在最终用户登录后)进入/token端点,并获得访问和刷新令牌。访问令牌的有效期为1小时,当它过期时,AcquireTokenSilent将对/Token端点自动使用刷新令牌来获取新的访问令牌

我在这件事上也有点乱七八糟。根据我的理解再解释一下

  • 在上下文中,提到以下步骤:
    • 授权,返回授权码
    • 使用身份验证代码获取访问令牌(通常有效时间为1小时)并刷新令牌
    • 访问令牌用于获取对相关资源的访问
    • 访问\u令牌过期后,使用刷新\u令牌获取新的访问\u令牌
  • MSAL.NET通过令牌缓存抽象了这个刷新令牌的概念。
    • 有一个序列化令牌缓存的选项。看见这就是如何在桌面应用程序会话中保留登录信息,并避免登录windows
    • AcquireTokenSilentAsync是使用refresh_令牌获取新访问_令牌的过程,但这是在内部完成的。有关更多详细信息和其他访问模式,请参阅

希望这能澄清为什么TokenCache是MSAL.NET中的“新”刷新令牌,而TokenCache是序列化和保存所需的。在这方面有类似的库。

TokenCache
基本上是一个JSON对象,当您调用
SerializeMsalV3()
时,它被用作字节数组。将字节数组转换为字符串时,将同时看到访问令牌和刷新令牌。然后,您可以使用此刷新令牌和
授予类型:“刷新令牌”
主体参数向
\token
端点发出HTTP请求

IConfidentialClientApplication capp =
                    ConfidentialClientApplicationBuilder.Create(myClientId)
                        .WithClientSecret(myclientSecret)
                        .Build();

    capp.UserTokenCache.SetAfterAccess((TokenCacheNotificationArgs args) =>
    {
       exchangeTokenCacheV3Bytes = args.TokenCache.SerializeMsalV3();
       string jsonString = System.Text.Encoding.UTF8.GetString(exchangeTokenCacheV3Bytes);
    });

MSAL通常为您处理刷新令牌。你需要为你的应用正确地实现令牌缓存。有什么方法可以获得它吗?我将把它保存在数据库或Azure KeyVault中,我认为没有API可以获取它们。实现所需功能的方法是创建一个令牌缓存类,该类处理在密钥保管库中存储(并加载)数据。不过,在这种情况下,还应添加一些内存缓存。。您不想每次都点击密钥库。如果需要,您可以查看MSAL源代码:)谢谢您的回答。我使用的是微服务架构,所以我的后台和前台服务是分开的。问题是从前台服务(js)获取访问令牌并将其发送到.net核心web api(后台)。后台服务将调用graph api,并使用此令牌执行其他一些操作。因此,我需要在后端服务中使用刷新令牌,以便能够管理令牌。@S.Anna您查看了吗?我认为这将是完美的这种情况。基本上,您的客户端应用程序将获得一个令牌并将其发送到您的后端(就像以前一样)。然后,后端可以将此令牌发送到Azure AD,以获得一个新的令牌,该令牌可用于下游API,如Microsoft graph。我已经查看了文档。现在我想使用MSAL代表流场景实现,但找不到任何文档。你能帮我举一个例子吗?我们还没有代表flow的代码示例,但是协议上的参考文档应该让你走上正确的道路。虽然这个答案在访问页面时是正确的,但是如果你在同一个页面上并发出ajax请求,情况就不是这样了。