c# - 单点登录,iframe,会话不起作用
问题描述
正在开发单点登录应用程序,其中正在登录到一个使用 Windows 2012 服务器中托管的框架版本 4.5 的应用程序,在 url 中传递 accesstoken,然后使用 IFrame,我正在尝试使用 .net 将数据发布到我的 mvc 应用程序核心 2.0 托管在 Windows 2016 服务器中。
通过 iframe 验证访问令牌,其中还在本地设置会话数据,然后在页面的生命周期内使用会话。
在我的 authcontroller 中验证请求后,我有一个 RedirectToAction 方法,这使我的会话为空。请任何人都可以帮助这些
-- 我的 iframe 网址 - http://ipaddress/Auth/VaildateToken?ssoToken=4234dfgdfg
验证令牌和设置会话的 MVC 应用程序。
public IActionResult VaildateToken(string ssoToken)
{
var result = _Service.VaildateAccessToken(ssoToken);
if (result != null)
{
SetSession(result);
return RedirectToAction("Index", "Controller");
}
else
{
return RedirectToAction("NoAccess");
}
}
public void SetSession(Client client)
{
HttpContext.Session.SetString("EmailId", client.EmailId.ToString());
HttpContext.Session.SetString("UserName", client.UserName.ToString());
}
会话设置正常,但在再次检查会话时重定向到操作结果后,它为空。
public IActionResult Index()
{
string EmailId = HttpContext.Session.GetString("EmailId");
if (string.IsNullOrEmpty(EmailId))
{
return RedirectToAction("logout", "Login");
}
}
然后我在 iframe 中看到一个登录页面。能否请您帮忙,我怀疑这可能是由于重定向到操作或缺少在 iframe 中设置会话。
任何帮助表示赞赏。谢谢
解决方案
这两个站点托管在 2 个不同的操作系统版本中。一个在 Windows server 2012 中,另一个在 Windows 2016 中。低版本不支持会话,同时发布到更高版本的操作系统。
在同一操作系统版本中托管两个站点时,代码运行良好。
推荐阅读
- python - 如何获得完成 Celery 任务所需的估计时间?
- c# - 你可以使用 lambda 表达式和 .find 吗?
- javascript - Discord.js - awaitReactions 在捕获超时错误时给出错误
- vue.js - 问题“当我扩展时,[vuex] 不会在突变处理程序问题之外改变 vuex 存储状态”组件
- dataweave - 如何按属性名称排序?
- azure-sql-database - Azure SQL 未返回结果
- docker - 如何使用多阶段 docker 镜像将 libnss3.so 从一个镜像复制到另一个镜像
- django - 在 django 中显示特定项目下的任务
- python - 为什么我的 for 循环不检查文件的最后一行是否有重复项?Python
- gpu - 如何测量设备+OpenCL+GPU中代码的执行时间