首页 > 解决方案 > 如何与 2 个 Web 应用程序共享 MSALSessionCache?

问题描述

我已经开发了 2 个 Web 应用程序。我已将 Azure Active Directory v2.0 用于用户身份。这两个应用程序在 Azure 中作为单独的 Web 应用程序托管。使用应用程序网关,我将特定请求重定向到 Web 应用程序。

如果用户请求任何 Web 应用程序,则首先将其重定向到 Azure 租户端点进行身份验证。

成功登录后,它将被重定向到主 Web 应用程序,我在 OnAuthorizationCodeReceived 方法中遵循以下代码。

TokenCache userTokenCache = new MSALSessionCache(signedInUserID, notification.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase).GetMsalCacheInstance(); ConfidentialClientApplication cca = new ConfidentialClientApplication(ApplicationId, Authority, RedirectUri, new ClientCredential(ApplicationKey), userTokenCache, null);

现在当用户从一个 Web 应用程序导航到另一个 Web 应用程序时。我正在使用下面的代码从缓存中获取令牌。

TokenCache userTokenCache = new MSALSessionCache(signedInUserID, new HttpContextWrapper(HttpContext.Current)).GetMsalCacheInstance(); ConfidentialClientApplication cca = new ConfidentialClientApplication(Startup.ApplicationId, Startup.Authority, Startup.RedirectUri, new ClientCredential(Startup.ApplicationKey), userTokenCache, null);

var user = cca.Users.FirstOrDefault();

当我实现此代码并尝试在第二个 Web 应用程序中获取令牌时,它将在用户变量中给我 null 并引发错误。

我应该怎么办?

注意:如果某些用户登录了一个 Web 应用程序,则不需要登录另一个 Web 应用程序。会话和 cookie 在所有网络应用程序之间共享。

标签: asp.net-mvc-4azure-active-directorymsal

解决方案


以下示例解释了自定义令牌缓存序列化以在 ADAL.NET 3.x、ADAL.NET 4.x 和 MSAL.NET 之间共享 SSO 状态:active-directory-dotnet-v1-to-v2

此解决方案展示了如何在 .NET 桌面应用程序中自定义令牌缓存序列化,以便它在 ADAL.NET V3.x 应用程序、ADAL.NET V4.x 应用程序、MSAL.NET 2 之间共享单点登录 (SSO) 状态。 x 应用程序


推荐阅读