我们正计划构建自己的SAML IDP。我有几个问题:
- 建立一个有意义吗
- 如果是,方法是什么?我没有看到任何用于SAML的Java库。不能使用spring安全saml,因为它支持集成第三方IDP,而不是构建一个
作为一个从头开始构建SAML
IdP的人,用Java构建一个主要涉及以下内容:
- 侦听SAML请求的服务器应用程序,通常在端口443上。你可以用弹簧靴
- 用于向IdP管理的用户显示身份验证页面的服务器代码。LDAP是一种常用的用户身份验证方法
- 用于提取经过身份验证的用户的属性的服务器代码。这可以是LDAP查找,以查找诸如名字、姓氏、电子邮件等属性
- 用于决定哪些属性可以释放给发出请求的SP的服务器代码。为此,可以使用SP的
entityID
- 用于将用户属性(例如,从LDAP(转换为SAML属性并发送到SP的服务器代码
1和4需要解析和创建SAML
。您可以使用openSAML进行这些操作。5需要SP可能理解的SAML
属性模式。你可以使用eduPerson。
使用SAML
和SP需要了解和实现各种SAML
配置文件。Web浏览器SSO是一种被广泛使用的SSO。你可以在这里阅读有关个人资料。
一旦您了解了SAML
及其在流程中的适用位置,就需要了解/实现XMLSignature和使用PKI的各种加密主题。
一旦您有了一个有效的、经过测试的IdP实现,您就需要能够解析SAML元数据(PDF(,以使用其公钥证书和元数据中的各种其他URL来验证SP。您还需要使SP元数据保持最新,并创建要发送到SP的IdP元数据,以便它可以验证您将签署的SAML
Response
。
如果ROI不值得那么多的开发,你可以使用"标准"IdP。
这里有一个SAML IDP列表。
这里有一个SAML堆栈列表。
添加@codebrane的答案,您是否计划同时支持SP和IDP启动?
但总的来说,不要。使用现成的产品,或者至少使用坚固的SAML堆栈库。