WIF滑动会话重新认证

2024-01-21

我已经在依赖方应用程序中实现了滑动会话,如中所述WIF 4.5 的滑动会话 http://www.cloudidentity.com/blog/2013/05/08/sliding-sessions-for-wif-4-5/。就目前而言,这很有效,但有一个问题似乎没有人谈论。

正如链接的博客文章指出的那样,当 RP 令牌过期时,下次发出请求时,将从 STS 重新颁发令牌。当然,假设 STS 会话生命周期比 RP 会话生命周期长,如果您正在实现滑动会话,则几乎肯定会出现这种情况。

无论如何,这完全违背了滑动会话的全部意义。

似乎没有人讨论 RP 会话过期后该怎么办。我什么want是,如果 RP 会话超时(通常是因为有人离开办公桌 10 分钟),我的应用程序将重定向到 STS 登录页面,用户可以在其中重新进行身份验证,然后重定向回我的页面已请求;或者也许是我提出请求时所在的页面。

我几乎确信这是可能的,但我完全不知道它是如何完成的。

这是我的 global.asax 代码:

    private const int InactivityTimeout = 5; // minutes

    void SessionAuthenticationModule_SessionSecurityTokenReceived
        (object sender, SessionSecurityTokenReceivedEventArgs e)
    {
        var now = DateTime.UtcNow;
        var validFrom = e.SessionToken.ValidFrom;
        var validTo = e.SessionToken.ValidTo;
        double halfSpan = (validTo - validFrom).TotalMinutes/2;
        if (validFrom.AddMinutes(halfSpan) < now && now < validTo)
        {
            // add more time
            var sam = sender as SessionAuthenticationModule;

            e.SessionToken = sam.CreateSessionSecurityToken(
                e.SessionToken.ClaimsPrincipal,
                e.SessionToken.Context,
                now,
                now.AddMinutes(InactivityTimeout),
                e.SessionToken.IsPersistent);
            e.ReissueCookie = true;
        }
        else
        {
            // re-authenticate with STS
        }
    }

我的问题:

  1. Is the else子句放置重新验证逻辑的正确位置?
  2. 如果是这样,请提供一个例子,因为我不知道。
  3. 如果#1 的答案是否定的,那么我是否需要订阅一个单独的事件来告诉我“嘿,您的会话安全令牌已过期!”?

我建议您同步 STS 和 RP 上的会话生命周期。

您可以在STS上将会话生存时间设置为10分钟,在RP上将会话生存时间设置为10分钟,并在RP上使用滑动会话方式。 10 分钟不活动后,两个会话都将过期,并且应要求用户重新进行身份验证。

如果您有多个 RP,您可以实现从 RP 到 STS 的一种保持活动状态 - 例如在 RP 上的每个网页中加载来自 STS 的资源。每当在 RP 上加载页面时,都会从 STS 加载保持活动资源 - 刷新 STS 会话。 10 分钟不活动后,它们都会超时,用户必须重新进行身份验证。

“来自 STS 的资源”可能意味着在不可见的 iframe 中加载的网页(Web 表单/MVC)。重要的是它是一个托管处理程序,因此请求由 ASP.NET 处理。

至于您的问题,如果您同步会话生命周期,以便它们一起超时:

  1. 不,您不需要在 else 子句中添加任何代码。如果令牌过期,WIF 将重定向到 STS。
  2. 只需删除 else 子句即可。
  3. 让 WIF 为您处理这件事。

为了完整起见,如果您无法同步会话生命周期,则可以在 RP 会话过期时触发联合注销。以下代码片段会在配置的发行者 (STS) 处触发注销。您可以将其放在 else 子句中,以在 RP 会话过期后触发第一个请求的注销:

using System.IdentityModel.Services; //WIF 4.5

var stsAddress = new Uri(FederatedAuthentication.FederationConfiguration.WsFederationConfiguration.Issuer);
WSFederationAuthenticationModule.FederatedSignOut(stsAddress, null); //Optional replyUrl set to null

希望有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WIF滑动会话重新认证 的相关文章

  • 授予 Rails 应用 API 访问权限的最佳身份验证方法

    我想为我的网络应用程序提供经过身份验证的 API 访问 此类服务的消费者通常是其他网站 服务 验证这些用户身份的最佳方法是什么 OAuth openID http 身份验证 正如我们的工作一样 哪个最好 的答案是这样的 是 这取决于 HTT
  • html 表单发布到 Flex 应用程序

    我有一个基本完成的 Flex 应用程序 它使用 Zend AMF 来连接 提供数据 我的应用程序确实有一个登录屏幕 看起来工作正常 现在我想在我的网站上添加另一个登录表单 允 许用户输入用户名 密码 提交表单时应将数据传递给 Flex 应用
  • Thinktecture Identity 服务器 v3 Google 提供商

    我在集成外部提供商 即 Google 与 Thinktecture 身份服务器 v3 时遇到问题 我收到以下错误 客户端应用程序未知或未授权 有人对这个错误有任何想法吗 Whoever 看起来客户端和服务器中的 RedirectUri 值不
  • AngularJS + Laravel 5 身份验证

    在使用 AngularJS 构建 SPA 时 我想在 AngularJS 网站中实现用户身份验证 但是 我不知道从哪里开始以及最佳实践是什么 基本上我有一个确定可以担任一个或多个角色 我寻找了一些例子 这样我就可以对如何正确处理这个问题有一
  • 生产中未使用快速会话设置 Cookie

    我的应用程序分为客户端和服务器 客户端是托管在 Now sh 上的前端 Nextjs 应用程序 服务器是使用 Express 创建并托管在 Heroku 上的后端 因此域是 client app now sh 和 server app he
  • 在浏览器上验证 JWT

    我一直在读关于JWT https jwt io 我知道它分为三个部分 即header payload and signature 我将哈希算法保留在标头中 将基本信息保留在有效负载中例如 姓名 年龄 职务 有效期等在有效负载中 然后这两个都
  • 使用 Wordpress 验证 Flask API

    我有两个网站 一个托管大部分内容的 WordPress 博客 我还用 Flask 编写了一个 API 我想在 Wordpress 受密码保护的页面 中使用 API 但我需要在 Flask 响应之前验证请求是否经过身份验证 当我收到对 Fla
  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • Grails + Spring Security:无法登录

    我刚刚开始学习Grails和Spring 我已经按照官方教程创建了一个登录系统 但我无法登录 用户名或密码不匹配 我知道 90 的情况下这是由于双重编码或多个数据源 这也导致双重编码 造成的 但我也没有这样做 class BootStrap
  • AWS Amazon - 登录循环卡住

    我已经使用 AWS 亚马逊几年了 但是 突然当我登录时 我进入了此验证部分 他们将验证码发送到我的电子邮件 我收到了该代码 因此 我输入收到的代码 最终返回登录页面 所以我登录后 同样的事情一遍又一遍地发生 我无法进入我的仪表板 它只是不断
  • WCF WebHttp 混合身份验证(基本和匿名)

    所有这些都与 WebHttp 绑定有关 托管在自定义服务主机中 IIS 目前不是一个选项 我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy 当我将端点的绑定配置为使用
  • 在 Subversion 中,我可以是登录名以外的用户吗?

    我想知道如何获得Subversion更改我的更改显示的名称 我刚刚开始使用Subversion 我目前正在使用它来对 XP 笔记本电脑上的代码进行版本控制 我总是以我妻子的名字登录 我希望 subversion DB 显示我名下的更改 稍后
  • python:API 令牌生成及其危险

    我正在按照 Flask Web Development 一书来实现基于令牌的身份验证 基本上 用户使用 HTTP 基本身份验证对其进行身份验证 并为其生成令牌 s Serializer app config SECRET KEY expir
  • 如何使用 next auth 通过自定义 Spring API 库和端点进行身份验证

    我是 Next js 的新手 正在将我的前端从 React 迁移到 Next v4 我已经使用 Spring 开发了一个后端 它连接到 Azure 上托管的 MySQL 数据库 该 API 在 Postman 和 React 前端上经过全面
  • 自托管 WCF REST 服务和基本身份验证

    我创建了一个自托管的 WCF REST 服务 带有 WCF REST Starter Kit Preview 2 中的一些额外内容 这一切工作正常 我现在正在尝试向服务添加基本身份验证 但我在 WCF 堆栈中遇到了一些相当大的障碍 这阻止了
  • iPhone 应用程序在首次 Facebook Connect 授权/登录后崩溃

    我一直在到处寻找答案 但找不到 问题是 我有一个 iPhone 应用程序 在 AppStore 上 它使用脸书 iPhone SDK https github com facebook facebook iphone sdk 我使用 SDK
  • PHP 基本身份验证 file_get_contents() [重复]

    这个问题在这里已经有答案了 我需要从网站解析一些 XML 数据 XML 数据是原始格式 但在我需要进行身份验证之前 基于基本网络服务器的身份验证 使用用户名和密码 I tried homepage file get contents htt
  • 限制对记录的访问。基于声明的权限是个好主意吗

    在 net 基于声明的身份框架中 如果我想限制用户对某个帐户 特定帐户 123456 执行操作 查看或编辑 我说的是商业实体 例如银行帐户 创建索赔是个好主意吗对于他们可以查看或编辑的每个帐户 一组中有很多索赔有什么缺点吗 系统管理员可能有
  • 通过 AJP 将 REMOTE_USER 转发到 tomcat(例如用于 shibboleth)

    今天我刚刚遇到了以下问题 1 我将apache配置为基本身份验证 需要有效用户 这有效 2 我进一步配置 apache 将某些路径 在我的例子中为 idp 的请求转发到 tomcat servlet shibboleth IDP 结果是 s
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https

随机推荐

  • 这是 iOS14 中预期的 @State var 行为还是一个错误?

    当我在 iOS14 sim 或设备上运行为 iOS14 编译的以下代码时 更新的 State 变量 选择 不会传递到显示为 sheet 确切的代码在 iOS 13 5 sim 或 13 6 设备上运行正常 如果我在视图中的某个位置放置一个文
  • Android 操作栏标签栏分隔线

    我在设置分隔线的可绘制对象时遇到问题 我的 style xml 如下所示
  • dtruss 在 OS X 10.11 上的 ps 上失败

    我想看看是哪个系统调用ps用于获取 OS X 10 11 El Capitan 上进程的命令行 并遇到以下错误 dtruss ps p 43520 o args dtrace failed to execute ps dtrace cann
  • 运行时错误:无法创建链接(名称已存在)Keras

    当我保存模型时 出现以下错误 RuntimeError Traceback most recent call last
  • 在旋转动画期间更新属性

    我正在 Kotlin 中制作旋转动画 并且在每个动画之后我想设置一个净rotationStart和rotationEnd 其中rotationStart值最初应设置为 0 然后假设每次旋转后的rotationEnd值 val rand Ra
  • NSWindow 中的底部栏

    我正在 Cocoa 中开发一个应用程序 我需要在窗口的底部栏显示进度 但我正在寻找一种解决方案 将底部栏放入NSWindow 期待解决方案 这是在窗口底部放置一个栏的代码 就像在取景器中一样 theWindow setContentBord
  • 使用中的 Gunicorn 连接:('0.0.0.0', 5000)

    我今天下午安装了 redis 它导致了一些错误 所以我卸载了它 但是当我使用以下命令启动应用程序时 此错误仍然存 在foreman start 关于修复有什么想法吗 foreman start 22 46 26 web 1 started
  • .net 4.0 中并行网络爬虫的最佳实践

    我需要通过代理下载很多页面 构建多线程网络爬虫的最佳实践是什么 Parallel For Foreach 是否足够好 还是对于繁重的 CPU 任务更好 您对以下代码有何看法 var multyProxy new MultyProxy mul
  • 如何在 IBM Worklight 中设置 MySQL

    我刚刚了解了IBM Worklight 我想知道如何设置和配置MySQL数据库 我已经设置了Worklight Adapter 但是 我不知道如何用MySQL创建数据库 您应该通过IBM Worklight 入门 http www ibm
  • Python+BeautifulSoup:从网页中抓取特定的表

    我正在尝试从以下位置抓取特定的表格 这个网页 http biz yahoo com c s html 我想要抓取的是股票信息 日期 公司名称 比例以及是否可选 这是我到目前为止所拥有的 from bs4 import BeautifulSo
  • 在模糊功能上获取 jquery 自动完成中的选定值

    我想要具有自动完成功能 当存在模糊事件时 文本框应填充值列表作为第一项 我希望具有与此链接中实现的功能相同的功能link http www redbus in 我有下面的代码 它填充在选项卡和输入键上 但不知道如何在模糊事件上实现相同的功能
  • .net4 中仍然存在内存泄漏 - 将内存 BitmapImage 绑定到 Image-Source

    我知道过去曾在这里提出过非常类似的问题 但都没有解决我的问题 我将内存中的图像加载到 BitmapImage 中 private static BitmapImage LoadImage byte imageData if imageDat
  • mini-css-extract-plugin 模块的 chunkFilename 的用途是什么?

    我现在使用 mini css extract plugin 模块 并设置其 chunkFilename 值并确保值 id css 通过运行它 但是 我看不到该文件 参考如下 https webpack js org plugins mini
  • JavaScript 新函数作用域 ReferenceError

    有什么办法可以让下面的代码工作吗 function var n abc new Function return alert n 如果我在浏览器中运行代码结果是 未捕获的引用错误 n 未定义 另外 我还需要在 新函数 中访问一些其他变量 例如
  • 将图像中的所有白色像素转换为黑色像素

    我有这张图片rand walk 2 png 我想将所有白色像素转换为黑色像素 这样就有了一张图片红色随机游走在黑色背景上 这意味着我不能仅仅反转图像的颜色 我当前的代码只是找到白色像素并将它们设置为黑色 from PIL import Im
  • ADO.NET 中具有 GROUP BY 功能的聚合函数

    这是一个更直接的问题 源于较早的问题我之前有过更普遍的问题 https stackoverflow com questions 828356 allowing a user to create a custom query of a tab
  • 带有自定义图块的动态谷歌地图可防止重复平移

    我有一个动态图块集 我不想允许平移超出其范围 下面的代码让我很接近 但用户仍然可以在严格边界之外水平滚动 因为它使用地图中心进行比较 var strictBounds new google maps LatLngBounds new goo
  • 无法授予对证书、标识符和配置文件的访问权限

    我购买了一个苹果开发者帐户 我正在尝试添加一个用户作为管理员并授予对证书 标识符和配置文件的访问权限 但该复选框已禁用 我无法勾选它 我认为您已经创建了 Apple 开发者帐户个人 要将其他用户添加为具有 证书 标识符和配置文件 访问权限的
  • Rails,Ruby,如何对数组进行排序?

    在我的 Rails 应用程序中 我正在创建一个数组 如下所示 messages each do message list lt lt id gt message id title gt message title time ago gt m
  • WIF滑动会话重新认证

    我已经在依赖方应用程序中实现了滑动会话 如中所述WIF 4 5 的滑动会话 http www cloudidentity com blog 2013 05 08 sliding sessions for wif 4 5 就目前而言 这很有效