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

Spring 安全 SAML 断言已过期

司马德水
2023-03-14

服务提供程序(Spring Security SAML)如何以及何时验证断言是否过期?我在webbapplication中创建和配置了一个服务提供程序。我的身份提供程序是ADFS 2.0进行身份验证并返回带有断言的SAML响应。此断言有一个“条件”,带有标志“NotBy”和“NotOnOrAfter”。到目前为止,我的断言有效期为1分钟。

当我通过身份验证时,我的客户端会话有效期为10分钟。这意味着我的断言将在客户端会话仍然有效时过期。服务提供商是否应该检测到我的断言已过期并因此要求IDP重新身份验证?我错过了什么?

共有1个答案

郑西岭
2023-03-14

我遇到了你同样的问题,并仍在调查。sp和isp之间的时间似乎不同。您可以测试它扩展WebSSOProfileConsumerImpl,实现verifyAssertion方法。这里的代码注释如下:

@Override
protected void verifyAssertion(Assertion assertion, AuthnRequest request,   SAMLMessageContext context) throws AuthenticationException, SAMLException, org.opensaml.xml.security.SecurityException, ValidationException, DecryptionException {

    /*// Verify storage time skew
    if (!isDateTimeSkewValid(getResponseSkew(), getMaxAssertionTime(), assertion.getIssueInstant())) {
        throw new SAMLException("Assertion is too old to be used, value can be customized by setting maxAssertionTime value " + assertion.getIssueInstant());
    }*/

    // Verify validity of storage
    // Advice is ignored, core 574
    verifyIssuer(assertion.getIssuer(), context);
    verifyAssertionSignature(assertion.getSignature(), context);

    // Check subject
    if (assertion.getSubject() != null) {
        verifySubject(assertion.getSubject(), request, context);
    } else {
        throw new SAMLException("Assertion does not contain subject and is discarded");
    }

    // Assertion with authentication statement must contain audience restriction
    if (assertion.getAuthnStatements().size() > 0) {
        //verifyAssertionConditions(assertion.getConditions(), context, true);
        for (AuthnStatement statement : assertion.getAuthnStatements()) {
            if (request != null) {
                verifyAuthenticationStatement(statement, request.getRequestedAuthnContext(), context);
            } else {
                verifyAuthenticationStatement(statement, null, context);
            }
        }
    } else {
        verifyAssertionConditions(assertion.getConditions(), context, false);
    }

}
 类似资料:
  • 我们有一个产品有一个客户,当我们作为服务提供商并且idp在客户端时,我们使用Spring Security SAML为该客户实现了SAML流。 现在,我们有另一个客户也希望身份验证与 SAML 一起使用,并且我们希望同一 SP 为此客户实现 SAML 流,第二个客户还将有 2 个用于 SAML 的流,一个用于移动设备,另一个用于使用相同 IDP 的其他设备。两个客户的 IDP 是不同的。 问题 两

  • 本文向大家介绍sitecore 安全断言,包括了sitecore 安全断言的使用技巧和注意事项,需要的朋友参考一下 示例 CanRunApplication 检查用户是否有权运行给定的应用程序。如果没有,AccessDeniedException则抛出。 HasAccess HasAccess将检查给定参数是否为true,否则AccessDeniedException将抛出。          

  • 我正在进行IDP发起的登录,其中Azure AD是我的IDP,Keyclope是经纪人。我在Keyclope服务器控制台中发现以下错误:- 11: 02:17571调试[org.keydape.saml.common](默认任务-9)org.keybape.saml.processing.core.saml.v2.util。XMLTimeUtil issueInstant:2021-01-01T0

  • 我的任务是通过LDAP实现对Active Directory联合服务(SSL)的可访问性。首先我不得不说,我在ADFS和SAML方面的经验非常少。我决定使用Spring Security SAML扩展来实现这个特性。我从GIThub下载并安装Spring Security项目的SAML扩展:https://github.com/spring-projects/spring-security-sam

  • 我有一个Java Web应用程序,我想将其作为服务提供商并实现SAML。我不确定如何做这件事的工作流程。 我已经阅读了这个SO问题,但仍然无法完全理解。在问题中,他们说他们需要向IDP发送请求,如果我是对的,称为断言。 如何创建断言?我在那里看到了样品。但是在哪里传递登录凭据呢? 另外,我如何在IDP注册我的应用程序,我是否需要安装IDP为此提供的一些证书?工作流程是什么? 谢谢

  • 我正在使用多个SP实现单点登录。以下是我的基本理解: 1) 浏览器(用户)向服务提供商(SP)请求资源 2)SP重定向(使用SAML请求)到身份提供程序(IdP) 3)由于这是第一次登录,用户将向(IdP)提供其有效凭据 4)然后,IdP将浏览器(带有包含SAML令牌的SAML响应)重定向到SP页面。 现在,假设我有服务提供商A和服务提供商B。一个用户已经完成了关于服务提供商A的步骤。从服务提供商

  • 我试图从开发人员的角度理解IdP发起的SSO的基本流程。我还试图从随。NET集成工具包。 基于此链接:http://documentation.pingidentity.com/display/PF610/OpenToken 适配器配置 问:PingFederate 服务器如何解析 SAML 断言?我是否必须从 SP 服务器对其进行编码?还是PingFederate服务器的设置会进行解析? 我现在

  • 我有一个webservice操作,其中我将获得SAML断言作为请求体的一部分。我跟踪XSD: saml:断言是指:< br>