【发布时间】:2011-07-27 00:16:26
【问题描述】:
我的公司目前正在开发一个 Java Web 应用程序。我们的一些客户拥有内部 SAML 服务器(身份提供者?),并要求我们与他们集成。所以最近我一直在阅读它并使用 OpenAM。这样大概3天后,我对它有了一个大概的了解,但是我的知识还是有一些差距的。我希望有人可以为我解决这个问题。
这就是我想象的用户登录的工作流程。
让我们将客户的 SAML 服务器定义为 https://their.samlserver.com。因此,用户来到我们的 Web 应用程序以获取受保护的资源。假设 URL 是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> 如何返回到我的 Web 应用程序以便我检查它?
我应该在该响应中寻找什么来验证它是否成功?失败是什么样的?
我们目前使用电子邮件地址 (LDAP) 来识别用户,因此我们可能会从响应中获取它并以与现在相同的方式使用它。在回复中我还应该注意什么?
现在我们已经检查了该响应的有效性,我们可以像现在一样授予用户一个会话。但是当他们想注销时,是否有相应的工作流程?我是否必须通知 IDP 用户已离开?
最后,在我的阅读中出现了几个主题,我不确定它们如何适应这个工作流程。它们是信任圈、令牌和工件。
感谢大家的帮助。前两天查了很多资料,多玩一会,有可能把它们拼凑起来。但是我还没有找到一个简单的“这是帖子”工作流程文章。也许那是因为我对它的工作原理有误。也许是因为这不是那么受欢迎。但我真的很想确保我得到了工作流程,所以我不会错过像用户身份验证这样重要的事情中的关键步骤。
【问题讨论】:
-
我现在也遇到了同样的问题(研究如何创建与 Ping Identity 交互的轻量级联合 SAML v2 服务提供者)。你介意评论一下它对你的效果吗?您最终是使用 fedlet 还是编写自己的代码?谢谢!
-
我的环境有些相似。我有一个在 tomcat 上运行的基于 java 的 Web 应用程序,现在我必须使用 SAML 进行 SSO。除了理论知识,我对这些技术一无所知。有人可以帮我从头开始配置吗?
标签: security authentication saml