每个人早上,
我公司目前正在开发Java Web应用程序。我们的几个客户有内部SAML服务器(身份提供商?),并要求我们与他们集成。所以最近我一直在阅读它并与OpenAM一起玩。大约3天后,我对它有一个大致的了解,但我的知识仍然存在一些差距。我希望有人可以为我解决这个问题。
所以这就是我想象用户登录的工作流程。
让我们将客户SAML服务器定义为https://their.samlserver.com。因此,用户访问我们的Web应用程序以获取受保护的资源。假设网址为http://my.app.com/something。
因此,如果我是正确的, my.app.com 是SAML定义为服务提供商的内容。我们的应用程序意识到该用户需要登录。然后我们向用户提供这样的页面......
<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
<input type="hidden" name="SAMLRequest" value="someBase64Data" />
<input type="submit" value="Submit" />
</form>
而且someBase64Data
应该是此base64
的编码版本...
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="identifier_1"
Version="2.0"
IssueInstant="2004-12-05T09:21:59Z"
AssertionConsumerServiceIndex="0">
<saml:Issuer>http://my.app.com</saml:Issuer>
<samlp:NameIDPolicy
AllowCreate="true"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>
所以我的第一对问题。
假设 ID 值是多少?
为什么我可以宣称自己是发行人?
身份提供商是否了解我?也许这就是信任圈
我一直在 OpenAM 上看到。如果它确实了解我,它如何了解我以及它需要知道什么?
因此,在用户转发该页面后,他们将被带到IDP https://their.samlserver.com提供的页面。他们在该页面上进行身份验证,IDP可以验证身份验证并查找用户。身份验证成功后,IDP会发送回<samlp:Response>
个here。
还有一些问题。
首先,<samlp:Response>
如何回到我的网络应用程序,以便检查它?
我应该在回复中寻找什么来验证它是否成功?失败是什么样的?
我们目前使用电子邮件地址(LDAP)来识别用户,因此我们可能会从响应中获取并以与我们现在相同的方式使用它。还有什么我应该注意到的回应?
现在我们已经检查了有效性的响应,我们可以向用户授予像我们当前那样的会话。但是当他们想要注销时,是否有工作流程?我是否必须通知IDP该用户已离开?
最后,我的阅读中有几个主题被抛出,我不确定它们是如何适应这个工作流程的。它们信任圈,代币和工件。
感谢大家的帮助。我在过去的几天里发现了很多信息,而且我可能会在玩完一段时间之后把它们拼凑起来。但我还没有找到一个直截了当的“这是帖子”工作流程文章。也许那是因为我对这是如何工作的错了。也许是因为这不是那么受欢迎。但我真的想确保我得到了工作流程,所以我没有错过与用户身份验证同等重要的关键步骤。
答案 0 :(得分:45)
回答您的具体问题:
1。)应该是什么“ID”值?
SAML系统实体确保的机制 标识符是唯一的留给实现。在一个案例中 采用随机或伪随机技术,概率为2 随机选择的标识符相同必须小于或等于 到2 ^ -128并且应该小于或等于2 ^ -160的长度。 可以通过编码随机选择的值来满足此要求 长度在128到160位之间。
2.。)IdP如何了解您?
3。)响应在哪里,以及要检查什么?
4.。)退出怎么办?
简而言之 - 从头开始实施这一点非常复杂。最好使用试用过的真正的图书馆和/或产品,如伊恩建议。像他这样的公司已经投入了数百小时的开发时间来根据规范和测试与其他供应商的互操作性来实施。
答案 1 :(得分:2)
如果您只是尝试将单个Java应用程序设置为服务提供者,则应考虑使用来自Oracle(作为独立)或ForgeRock(与OpenAM捆绑在一起)的Fedlet 。 ForgeRock Fedlet有一些问题与Shibboleth 2.2.1作为身份提供者进行交互,但我发现配置起来更简单,信息更丰富。
每个都有自述文件中包含的明确说明,以帮助您进行部署。配置Fedlet并与IDP通信后,成功页面将显示将联合SSO集成到应用程序中所需的所有代码。它完成了发送和接收AuthnRequests和Responses的后台工作。
斯科特的回答很好地回答了你的问题,但我认为尝试自己编写生成SAML的代码正在重新发明轮子。 Fedlet的设计正是考虑到这个用例。