在ELB后面使用带有Spring Boot的SAML重定向到http而不是https

时间:2018-11-19 07:15:48

标签: spring-boot saml-2.0 spring-saml okta

我正在尝试使用Okta从SpringBoot应用程序对用户进行身份验证。

我已经按照Okta教程从https://developer.okta.com/blog/2017/03/16/spring-boot-saml

设置了应用程序

但是我的应用程序位于ELB的后面,因此TLS在LB处终止。因此,我已经修改了教程中的配置以适合我的需求。

 @Override
protected void configure(final HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/saml*").permitAll()
            .anyRequest().authenticated()
            .and()
        .apply(saml())
            .serviceProvider()
                .keyStore()
                    .storeFilePath(this.keyStoreFilePath)
                    .password(this.password)
                    .keyname(this.keyAlias)
                    .keyPassword(this.password)
                    .and()
                .protocol("https")
                .hostname(String.format("%s", serverName))
                .basePath("/")
                .and()
            .identityProvider()
            .metadataFilePath(this.metadataUrl);
}

这可以解决问题,但是有问题。 Okta验证用户身份后,最终将用户重定向到http URL而不是https URL。我认为这是因为TLS在LB处终止,而我的应用实际上正在接收带有HTTP的请求,该请求正在RelayState中发送。

这是我发现的东西:spring-boot-security-saml-config-options.md。 它包含用于春季启动安全性的SAML属性列表。我将以下内容添加到application.properties文件中

saml.sso.context-provider.lb.enabled = true
saml.sso.context-provider.lb.scheme=https
saml.sso.profile-options.relay-state=<https://my.website.com>

它不会更改http重定向。我在做错什么吗?

1 个答案:

答案 0 :(得分:0)

当类似Okta的SAML 2.0 IdP重定向回您的应用程序时,端点URL要么基于您的应用程序公开的SAML 2.0元数据,要么基于IdP中的配置。

此外,在SAML 2.0 AuthnRequest中添加Destination属性是可选的:

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" 
    Destination="https://my.website.com" IssueInstant="2018-11-22T09:23:08.844Z" Version="2.0" ID="id-f8ee3ab1-6745-42d5-b00f-7845b97fe953">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> ... </Issuer>
...
</samlp:AuthnRequest>