我公司目前正在开发Java Web应用程序。我们的几个客户拥有内部SAML服务器(身份提供程序?),并要求我们与它们集成。所以最近我一直在阅读它,并使用OpenAM。经过大约三天的时间,我对它有了一个大致的了解,但是我的知识仍然存在一些不足。我希望有人可以帮我解决这个问题。
因此,这就是我如何想象用户登录的工作流程。
让我们将客户SAML服务器定义为https://their.samlserver.com。因此,用户访问我们的Web应用程序以获取受保护的资源。假设URL是http://my.app.com/something。
因此,如果我是对的,那么SAML将my.app.com定义为Service Provider。我们的应用程序意识到该用户需要登录。然后,我们向用户显示一个类似的页面...
<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>
定义。
还有几个问题。
首先,如何<samlp:Response>
返回到我的Web应用程序以便我可以检查它?
我应该在该响应中寻找什么以验证它是否成功?失败是什么样的?
当前,我们使用电子邮件地址(LDAP)来标识用户,因此我们可能会从响应中获取该地址并以与现在相同的方式使用它。在回应中,我还有什么需要注意的?
因此,既然我们已经检查了该响应的有效性,就可以像当前一样为用户授予会话。但是,当他们要注销时,是否有工作流程?我是否必须通知IDP用户已离开?
最后,我的阅读中涉及了两个主题,我不确定它们如何适合此工作流程。它们是信任圈,令牌和人工制品。
感谢大家的帮助。在过去的几天里,我发现了很多信息,经过更多的比赛之后,我有可能将它们组合在一起。但是我还没有找到直接的“这里是帖子”工作流文章。也许是因为我错了。也许是因为这并不流行。但是我真的很想确保我得到了工作流程,这样我就不会错过与用户身份验证同样重要的关键步骤。