asp.net-mvc-4 - 如何与 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 在所有网络应用程序之间共享。
解决方案
以下示例解释了自定义令牌缓存序列化以在 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 应用程序
推荐阅读
- python - 当我运行它的 .py 文件时,无法在 python 中写入文件。但是当我在pycharm中运行它时,它确实有效
- javascript - 限制列表中每个数字最多 5 位数字
- django-rest-framework - 身份验证成功后,如何返回从自定义用户子类化的 Django 用户?
- google-bigquery - 基于 BigQuery 中其他字段整数的 DateSub 函数
- python - 为什么减去日期时间会产生溢出错误?
- azure - 将 Azure Functions 与事件中心链集成的最佳参数是什么
- python - Python:在迭代标准输出时从子进程中捕获异常
- iis - 在发布托管在 IIS 中的 blazor 程序集应用程序 ASP.NET CORE 后,我收到了 DirectoryNotFoundException 错误
- python - 带有 datetime 和 sharex 的 pandas bar 和 line 子图
- ubuntu - 来自类的计时计时器类传递方法不起作用