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

SSO:SP是否应该在每个请求中验证与IDP的会话

宗政唯
2023-03-14

根据SP启动的SSO流,用户尝试访问SP。由于用户未经身份验证,他被重定向到IDP,在那里输入他的凭据,成功登录后,IDP在用户的浏览器中设置cookie(在IDP的域下),并使用SAML响应将用户重定向回SP。一旦SP验证SAML响应,它就会创建自己的cookie/令牌,并在sp域下的用户浏览器中设置。

在后续请求中理想情况下应该发生什么:

  1. SP是否应该只依靠自己的cookie来获取用户信息
  2. SP是否应该在每个请求中验证与IDP的用户会话。

如果建议使用选项1,从安全角度来看是否可以,因为登录后SP和IDP之间没有通信以进行进一步的请求。

如果建议选项2,则在每个请求中调用IDP都会产生开销,这可能会影响SP的性能。

请在这里建议什么应该是理想的流量。

共有2个答案

艾自强
2023-03-14

因此,用户已由身份提供程序授权/身份验证。您是否担心此授权/身份验证可能会突然过期?例如,IdP 可能属于用户的雇主,当用户被解雇时,立即撤销对 SP 的访问权限至关重要?也许用户发现他的凭据被盗,因此关闭/阻止了他的IdP帐户,您是否也希望能够停止SP会话?您只能在选项 1 中执行这些操作,因此这是更安全的选项。

正如你所说的,这会带来很大的开销。所以问题基本上是,一旦用户的IdP帐户被撤销,您的SP会话立即终止对您来说有多重要。

顺便说一句,我不喜欢的是IdP将会话存储在cookie中。在我看来,他不应该这样做,特别是如果你实现选项2,他不应该这样做。这样做的原因是,这使得注销变得非常棘手:用户现在应该记得在SP和IdP上注销,而他只需要登录一次。

孟浩然
2023-03-14

如果建议选项1,从安全角度看,登录后SP和IDP之间没有进一步请求的通信是否正常。

[ME]是的,验证cookie应该是SP的责任(可能使用其中的所有详细信息进行加密,或者通过指向永久存储区的ID进行引用)。IDP的工作是提供已经完成的身份。

如果建议选项2,则在每个请求中调用IDP都会产生开销,这可能会影响SP的性能。

[我]是的,用IDP验证用户会话太多了。其工作方式是,如果SP会话已经无效或正在创建,则转到IDP,如果IDP cookies会话有效,则给出SAML响应/声明,否则进行身份验证,最后SP创建新会话。

HTH

 类似资料:
  • 问题内容: 无论我们是否检查会话变量,会话超时都会在每个请求上重置吗?还是我们应该使用至少一个会话变量? Ajax请求是否导致重置会话超时?像,… 谢谢 编辑1) 会导致重置会话超时吗? 问题答案: 是的,它确实。是否实际使用都没关系。 但是,如果 仅 使用ajax调用,则可能会遇到一些问题。 (虽然我还没有遇到过它自己,在这里的解释)

  • 我有一个站点充当单点登录的身份提供者(IdP),另有2个服务提供者使用SAML 2对其进行身份验证。目前,两个服务提供商都使用相同的证书来验证来自IdP的SAML响应。 我现在很快就有第三家服务提供商加入了,我想知道我是否真的应该向每一方颁发单独的证书,以便我们可以在不影响其他服务提供商的情况下,在需要的情况下潜在地撤销他们的访问权?其他人采取了什么方法,为什么? 我使用SimpleSamlPHP

  • 我一直有一个问题,当请求来自域名而不是localhost时,会话变量不可用。例如,如果我设置一个用户变量: 当客户端发出另一个请求并且我尝试访问用户会话变量时,它返回null。 我注意到,在每个请求中,都会设置一个新的JSESSIONID cookie,并且ID值会更改。这是否意味着每次客户端访问服务器时都会创建一个新会话?如何在客户端之间保持相同的会话,以便我可以在Http会话中存储对象并访问它

  • 本文首次展示了SAML认证的过程:https://developers.google.com/google-apps/sso/saml_reference_implementation 我的应用程序目前与之兼容。但是,当用户单击SP提供的页面上的链接时,请求被重定向到IDP进行身份验证。用户可以在地址栏中清楚地看到IDP URL,感觉很慢。 我的情况:SP位于Jetty上,IDP位于Jboss6.

  • 问题内容: 我有登录功能 此函数用于将变量保存到会话中, 但是当新请求检查用户是否登录时 然后返回总是“注销”,因为会话已更改。我使用Redis来存储会话,我认为这是Redis的错误,因为当我停止使用Redis时,可以,请帮帮我! 问题答案: 最好的处理方式是始终让Express处理它(如果可以的话)。 https://flaviocopes.com/express-sessions/(更新了会话

  • 我正在替换Spring Boot REST控制器中对POST请求输入的手动验证。JSR-303 Spring Bean验证用于验证请求主体中的实例变量,这是预期的工作。什么是建议的方法来验证请求主体中的对象不是null? 我试过: > 用@NotNull注释整个类 我正在替换: 与Bean验证等效: 我尝试通过以下方式对控制器方法进行单元测试: 我希望MethodArgumentNotValidE