如何配置 Spring Security SAML 以与 Okta 一起使用?
Posted
技术标签:
【中文标题】如何配置 Spring Security SAML 以与 Okta 一起使用?【英文标题】:How do I configure Spring Security SAML to work with Okta? 【发布时间】:2015-02-27 02:16:20 【问题描述】:我正在尝试使 spring-boot-security-saml-sample 应用程序与 Okta 一起工作。要将 Okta 添加为提供程序,我对 WebSecurityConfig.java 进行了以下更改:
https://gist.github.com/mraible/c8b52972f76e6f5e30d5
我发现以下问题提供了一些指导,但我无法让事情正常进行。
configuring saml-sample (SP) to work with Okta (IdP)
这是我在 Okta 上使用的值:
Application label: Spring Boot SAML App
Force Authentication: false
Post Back URL: http://localhost:8080/
Name ID Format: EmailAddressRecipient
Recipient: http://localhost:8080/saml/SSO/alias/defaultAlias
Audience Restriction: com:vdenotaris:spring:sp
authnContextClassRef: PasswordProtectedTransport
Response: Signed
Assertion: Signed
Request: Compressed
Destination: http://localhost:8080/saml/SSO/alias/defaultAlias
Default Relay State: (none)
Attribute Statements: email|$user.email,firstName|$user.firstName
从日志看来它可以工作:
[2014-12-30 12:18:33.004] boot - 18748 DEBUG [http-nio-8080-exec-8] --- BaseMessageEncoder: Successfully encoded message.
[2014-12-30 12:18:33.004] boot - 18748 DEBUG [http-nio-8080-exec-8] --- HttpSessionStorage: Storing message a12gf64fh3f35fgh2a8dd1fd0i0dc02 to session C5D010344EF5D022718B12B6D25F1D1E
[2014-12-30 12:18:33.004] boot - 18748 INFO [http-nio-8080-exec-8] --- SAMLDefaultLogger: AuthNRequest;SUCCESS;0:0:0:0:0:0:0:1;com:vdenotaris:spring:sp;http://www.okta.com/k2gpb06TOMYOKAWUSXJM;;;
但是,它会将我重定向到 Okta 的网站,而不是返回我的网站。
【问题讨论】:
我没有任何个人经验,但我知道 Cloud Foundry 身份团队已经做到了。在此处查看源代码:github.com/cloudfoundry/login-server/tree/master/src/main/…. 【参考方案1】:我让它工作了!关键似乎是将请求设置为“未压缩”。从那里,我删除了“alias/defaultAlias”,因为这似乎只在您在 ExtendedMetadata 上设置别名时才有效。我在 Okta 方面的设置:
Application label: Spring Boot SAML App
Force Authentication: false
Post Back URL: http://localhost:8080/saml/SSO
Name ID Format: EmailAddressRecipient
Recipient: http://localhost:8080/saml/SSO
Audience Restriction: com:vdenotaris:spring:sp
authnContextClassRef: PasswordProtectedTransport
Response: Signed
Assertion: Signed
Request: Uncompressed
Destination: http://localhost:8080/saml/SSO
Default Relay State: (none)
Attribute Statements: email|$user.email,firstName|$user.firstName
【讨论】:
对于将 Okta 与 Spring SAML 集成的任何人,该手册现在包含 Okta 的基本分步集成指南,请参阅 docs.spring.io/autorepo/docs/spring-security-saml/… @VladimírSchäfer 能否更新您提供的上述链接中的 java 配置。 这是我上个月(2017 年 10 月)更新的指南:developer.okta.com/blog/2017/03/16/spring-boot-saml【参考方案2】:马特,
尝试将“回发 URL”设置为“localhost:8080/saml/SSO/alias/defaultAlias”。
从您的配置来看,“localhost:8080/saml/SSO/alias/defaultAlias”是“localhost”上的 SAML 端点,我们将 SAML 响应发布到该端点。
现在它是“localhost:8080/” - 您的演示站点可能只是将您重定向回 Okta,而不是解析 SAML 响应。
你没有提到你在 Okta 方面做了什么来测试这个。以下是有关如何执行此操作的说明 - https://support.okta.com/entries/27560008-Using-the-App-Integration-Wizard - 使用我们的应用程序向导,该向导在 okta 端创建正确的 SAML IDP 端点。您的演示站点需要 Okta 端的 SAML 登录 URL,以便它知道将 SAML 请求重定向到哪里。
有关 SAML 的更多信息 - 您可以在我们的开发人员网站上查看我们的 SAML 指南 - http://developer.okta.com/docs/getting_started/saml_guidance.html
让我知道进展如何。干杯
斯蒂芬
【讨论】:
我试过了,还是不行。我使用模板 SAML 2.0 应用程序在 Okta 端创建了一个应用程序。我能够让 Node 和 Sinatra 应用程序轻松运行。代码也少了很多。 我尝试在 Okta 方面将请求更改为“未压缩”,然后再进一步。现在它重定向回我的应用程序,但我在日志中看到以下错误:gist.github.com/mraible/02ad43d4deb7823ce449以上是关于如何配置 Spring Security SAML 以与 Okta 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Security SAML 配置远程发现?
如何在同一应用程序中使用 spring-sample 示例配置 Spring Security 基本身份验证和 SAML 身份验证
如何在 Spring Security SAML 示例中配置 IDP 元数据和 SP 元数据?
使用 spring-security-saml 在应用程序中没有配置 IDP 错误