当前位置: 首页 > 知识库问答 >
问题:

SAML如何解决SSO?

冷宏茂
2023-03-14

在阅读了一些关于SAML的文章后,包括“SAML for dummies”和SAML wiki文章,我仍然完全不清楚SAML实际上是如何解决SSO问题的。假设我以谷歌账户为例。我的理解是,如果我转到GMail并实现SAML,我将被重定向到IDP,比如说,这是谷歌的登录权限。然后,我的浏览器会重定向到那里,并要求我登录。在提供了正确的登录信息后,我返回到GMail,并使用Google Sign-in的私钥加密令牌和SAML响应,然后使用GMail的公钥对其进行身份验证,从而验证我是谁。

令我困惑的是,这似乎解决了首次登录或登录到单个应用程序的问题,但我不明白现在转到Google Drive会发生什么。即使我的浏览器将SAML令牌/响应保存为cookie,我也必须在令牌过期后再次登录,据我了解,大约是2分钟后。此外,即使在同一个应用程序中,对单独资源或endpoint的请求似乎也会以同样的方式超时。

我得到的唯一提示是,根据wiki文章,步骤1的目标资源位于SP检查“有效的安全上下文”然而,如果GMail和Drive是彼此不通信的独立应用程序,Drive怎么知道我已经有了有效的安全上下文?

问题:

  1. 在初始身份验证之后,哪些信息需要随未来请求一起发送到相同或不同的应用程序/endpoint?例如,也许每个请求都保存并重新发送了SAML断言。
  2. 如何保护/验证这些信息?
  3. 哪些超时与SAML的SSO相关联,以及如何在SP和IDP双方强制执行超时?

共有1个答案

索令
2023-03-14

您缺少的是Idp(您示例中的Google登录页面)在第一次登录时设置会话cookie。当您作为第二个应用程序访问Google drive时,它确实不知道gmail会话。Google drive重定向到idp以获得身份验证。

现在,由于idp域上的cookie,idp有了一个活动会话。这使得idp可以使用从持久会话信息生成的新断言回复google drive。

没错,每个断言通常只在几分钟内有效,但这不是问题,因为idp可以为每个应用程序创建新的断言。

对于超时:Idp可以在断言中设置SessionNotOnOrAfter条件,以告诉SP它必须在给定时间终止会话。

 类似资料:
  • 问题内容: 我正在尝试编写简单的Java代码,以在控制台上显示MongoDB集合。我在类路径中添加了mongodb-driver-3.0.0.jar。 但是,当我尝试执行代码时,它在数据库连接行给了我以下错误: 线程“主”中的异常java.lang.NoClassDefFoundError:com.montan.app.MongoDbJdbc.main(MongoDbJdbc.java:12)上的

  • 问题内容: 我试图通过我的Web项目上的applet访问客户端的临时目录。 当我自己运行小程序时,它毫无问题地得到了。 当我尝试使用javascript并调用applet方法在我的项目上获取它时,我在javascript控制台上运行。当我尝试读取temp目录下的文件时,我也遇到同样的异常。 这正是我所看到的: 怎么解决? 问题答案: 最简单的解决方案是对applet进行签名。

  • 问题内容: 我已经尝试了Oracle Java教程中的两个示例。它们都可以正常编译,但是在运行时都出现以下错误: 我想我可能将Main.java文件放在错误的文件夹中。这是目录层次结构: 这里是 我在这里做错了什么? 更新 将Main类放入graphics包中(添加package graphics;到其中)后,将类路径设置为“ _test”(包含图形的文件夹),进行编译,然后使用java grap

  • 问题内容: 我有2个函数,都返回诺言: 现在,我有了一个清单,在这两个诺言得到解决后,我想立即更新 已解决的主题应如下所示 问题答案: 创建一个承诺,当您通过的所有承诺均被拒绝或 任何 拒绝时,该承诺都会自动解决。 如果像您一样将其传递给数组,则处理成功解析的函数将收到一个数组,其中每个项目都是针对相同索引的诺言的分辨率,例如: 我个人认为传递对象更具可读性,这样您就可以在处理程序中获得一个对象,

  • 我在Oracle的Java教程中尝试了这两个示例。它们都可以很好地编译,但在运行时都会出现以下错误: 我想我可能有文件位于错误的文件夹中。 以下是目录层次结构: 这里是: 我做错了什么? 更新 在我将类放入包(我添加了)之后,将类路径设置为“_test”(包含图形的文件夹),编译它,并使用(从命令行),它工作了。 更新非常晚#2 我没有使用Eclipse(只是记事本和JDK),上面的更新解决了我的

  • 我已经在Oracle的Java教程中尝试了这两个示例。它们都编译得很好,但在运行时,都出现了以下错误: 我想文件可能在错误的文件夹中。 非常晚的更新#2 我没有使用Eclipse(只有记事本++和JDK),上面的更新解决了我的问题。然而,似乎这些答案中有许多是针对Eclipse和IntelliJ IDEA的,但它们有相似的概念。