.net - 在 ASP.NET MVC global.asax 中放弃会话
问题描述
我在这里进退两难。我已经通过不同的 ASP.Net MVC 5 项目实现了 SSO 登录,并且在身份和表单身份验证中一切正常。但我有一个要求。如果用户在不会自动登录之前从未进入过应用程序,则必须单击登录并订阅该应用程序。因此,对于从未进入过应用程序的用户来说,它必须看起来就像一个未登录的用户。我希望我对此很清楚。
我在应用程序和表单身份验证之间使用通用机器密钥来生成票证。
因此,我在方法中的 Global.asax 中进行了验证,Application_PostAuthenticateRequest
并Application_AcquireRequestState
查看当前登录的用户之前是否订阅了该应用程序,如果有,则没有任何反应,他通常以登录用户的身份进入。但如果他还没有订阅它必须放弃会话。
我试过使用,FormsAuthentication.SignOut()
但是这个会破坏 cookie 并删除它的 sso 方面。并且Session.Abandon()
什么都不做。所以,我的问题是如何在不删除 cookie 的情况下放弃会话或当前表单身份验证,所以如果他访问他订阅的任何其他应用程序,他不会有任何问题。
谢谢你。
解决方案
我找到了一种方法,每次我想添加自定义验证时,我都必须更改 FormsAuthentication Cookie 的名称并验证它是否与其他名称一起存在,然后使用 FormsAuthentication.signOut() 并分配 Current。 User 一个通用的空用户。
推荐阅读
- regex - 正则表达式替换用 VS 代码中的正则表达式本身替换整个单词
- javascript - 在 woo-commerce 中加载 bootstrap 3 模态的问题
- algorithm - 设计一个 O(|V | + |E|) 时间算法来找到有向图的根顶点(或报告不存在)
- javascript - 如何在 Yii2 中禁用/覆盖依赖项
- msbuild - MSBuild 下载文件任务路径中的非法字符
- laravel - 订单列表未按 order_date 排序
- android - 我如何通过 volley 从 json 响应中获取字符串
- robots.txt - 使用 robots.txt 向搜索引擎隐藏文件夹和子文件夹的正确语法
- javascript - 如何在加载/显示页面之前使用 Vue(路由器)获取 GET 请求变量
- drupal-8 - 如何 - 构建自定义 drupal 8 模块表单