我们的公司目前正在开发一个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值应该是什么?
为什么我可以把自己声明为Issuer?
身份提供者知道我吗?也许这就是我在OpenAM上看到的那个“信任圈”。如果它确实知道我,它又是如何知道我以及需要知道什么呢?
当用户被转发到页面时,他们会被带到一个由IDP提供的页面 https://their.samlserver.com。他们在那个页面上进行身份验证,IDP通过其魔力来验证认证并查找用户。认证成功后,IDP发送一个定义在这里的。
还有一些问题。
首先,<samlp:Response>
如何回到我的Web应用程序,以便我可以对其进行检查?
在响应中,我应该寻找什么来验证成功?失败的情况又是怎样的?
我们目前使用电子邮件地址(LDAP)来识别用户,因此我们可能会从响应中获取该信息,并像现在一样使用它。在响应中还有其他需要注意的内容吗?
因此,现在我们已经检查了响应的有效性,可以像我们目前做的那样向用户授予会话。但是当他们想要注销时,是否有相关流程?我需要通知IDP用户已经离开吗?
最后,在我的阅读中,还有几个主题被提及,我不确定它们如何适用于这个工作流程。它们是“信任圈”、“Tokens”和“Artifacts”。
感谢大家的帮助。在过去的几天里,我已经找到了很多信息,可能稍微再尝试一下就能拼凑在一起了。但是我仍然没有找到一个简单明了的“发布后”的工作流文章。也许这是因为我对它的工作方式理解错误,也许因为它不那么受欢迎。但是我真的想确保我掌握了工作流程,以免错过如此重要的用户身份验证步骤。