在Java中使用带有Google App Engine的Spring SAML扩展的SP实现

时间:2014-12-18 07:51:34

标签: google-app-engine spring-security saml spring-saml

我尝试使用第三方IdP在Google应用引擎上托管SP,并且我遇到了多个问题。

我正在使用Spring SAML扩展来实现java。我能够使用IdP idp.ssocircle.com作为IdP idp.ssocircle.com从官方指南http://docs.spring.io/spring-security-saml/docs/1.0.x/reference/html/chapter-quick-start.html单独运行(不是GAE)演示应用程序。

现在我的问题出现了,我试图将此代码集成到我的GAE项目中。当使用GAE运行时,我可以进入我重定向到ssocircle.com上登录的阶段,当我应该被重定向回我的页面时,我收到此错误:"错误401身份验证失败:解码传入的SAML消息时出错#34;并且在本地GAE服务器日志上我可以看到此消息

" [INFO] 2014年12月17日下午5:21:23 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry [INFO] INFO:处理请求时捕获的I / O异常(java.net.SocketException) :权限被拒绝:不允许发出套接字绑定:权限被拒绝。"

我想知道这是否是GAE对套接字的限制:1)套接字仅适用于付费应用(我没有付费应用,但可以考虑这些选项)2)你无法创建一个听插座;你只能创建出站套接字。 3)您无法绑定到特定的IP地址或端口。 (对我来说这听起来像是我的问题)。

而且我尝试在GAE上部署,应用程序仍然处于启动循环中,因为有关其他错误"嵌套异常是java.security.AccessControlException:访问被拒绝(" java.lang。 RuntimePermission"" modifyThreadGroup")",这听起来像是对我的另一个GAE限制。

在某些时候我已经准备放弃,因为我认为SAML Spring扩展无法与GAE一起使用,因为GAE存在限制。但是我看到你有相同的项目作为GAE上的演示运行(或者至少我认为它是在GAE上运行的,因为域名中有appspot部分)。 https://saml-federation.appspot.com/saml/discovery?returnIDParam=idp&entityID=saml-federation.appspot.com

如果你能给我一些关于我的问题的提示,我将不胜感激,如果你能帮我解决这个演示项目的源代码(无法在任何地方找到它),以及GAE所需的所有配置,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我创建了一个新的存储库https://github.com/vschafer/spring-security-saml-gae,其中包含在Google Application Engine上部署Spring SAML应用程序的说明。它还包括有助于避免遇到问题的类(套接字和线程)。

为了使用它:

  • 包含从项目中的repo创建的jar
  • 使用提供的org.springframework...StaticFilesystemMetadataProvider加载您的元数据
  • 如果您使用HTTP-Artifact绑定将bean org.springframework...ArtifactResolutionProfileImpl替换为org.springframework...google.ArtifactResolutionProfileGAE

如果您发现文档或代码中存在错误,请发表评论。