首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何成为SAML服务提供者

如何成为SAML服务提供者
EN

Stack Overflow用户
提问于 2011-03-31 15:20:56
回答 2查看 43.3K关注 0票数 84

我的公司目前正在开发一个Java应用程序。我们的几个客户都有内部SAML服务器(身份提供者?)并要求我们与他们融合。最近,我一直在阅读它,并与OpenAM一起玩。大约3天后,我对它有了一个大致的理解,但在我的知识方面仍然存在一些空白。我希望有人能帮我澄清这件事。

下面是我想象的用户登录的工作流程。

让我们将我们的客户SAML服务器定义为https://their.samlserver.com。因此,一个用户来到我们的web应用程序来获取一个受保护的资源。假设URL是http://my.app.com/something

因此,如果我是正确的,my.app.com就是SAML定义的服务提供者。我们的应用程序意识到这个用户需要登录。然后我们向用户展示这样的页面..。

代码语言:javascript
复制
<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编码的.

代码语言:javascript
复制
<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上看到的“信任圈”( of trust)。如果它知道我,它怎么知道我,它需要知道什么?

因此,在用户被转发该页面后,它们将被带到IDP https://their.samlserver.com提供的页面。他们在该页面上进行身份验证,IDP执行验证身份验证和查找用户的神奇功能。身份验证成功后,IDP将返回一个<samlp:Response>定义的这里

再问几个问题.

首先,<samlp:Response>如何返回到我的web应用程序以便我可以检查它?

在这个答复中,我应该寻找什么来验证它是否成功?失败是什么样子的?

我们目前使用电子邮件地址(LDAP)来识别用户,因此我们可能会从响应中获取用户地址,并以现在的方式使用它。我在回答时还有什么要注意的吗?

因此,既然我们已经检查了该响应的有效性,我们就可以像当前这样授予用户一个会话。但是当他们想要注销的时候,是否有一个工作流程呢?我必须通知IDP用户已经离开了吗?

最后,在我的阅读中,有几个话题被抛在了脑后,我不知道它们是如何融入这个工作流程的。他们是循环的信任,令牌和工件。

谢谢大家的帮助。在过去的几天里,我发现了很多信息,我可以在多玩几天后把它们拼凑在一起。但我还没有找到一篇直截了当的“这里是邮报”的工作流文章。也许是因为我搞错了。也许是因为这没那么受欢迎。但是我真的想确保我得到了工作流,所以我不会错过像用户身份验证这样重要的一步。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-01 00:55:38

在回答你的具体问题时:

( 1.)"ID“值应该是什么?

  • 这应该是SAML请求的唯一标识符。SAML2.0规范说明了它实际上是如何实现的,但提出了以下建议:

SAML系统实体确保标识符是唯一的机制留给实现。在采用随机或伪随机技术的情况下,两个随机选择的标识符相同的概率必须小于或等于2^ -128,长度应小于或等于2 ^-160。可以通过编码长度在128到160位之间的随机选择的值来满足这一要求。

( 2.)IdP是怎么知道你的?

  • 您的SP需要在IdP中注册。为此,SAML规范为"SAML元数据“定义了一种格式,该格式告诉IdP您的SAML接收方在哪里、证书是什么、您交换的属性等等。OpenAM可能规定了配置受信任SP的一些最低要求。这在每种产品中是不同的。

( 3.)响应在哪里,检查什么?

  • 响应将转到您的断言消费者服务(ACS) URL,通常定义在您从SP与IdP交换的SAML元数据中进行初始设置。当您接收到SAML响应时,您需要检查许多东西--但最重要的是,SAML状态代码应该是“成功”的,inResponseTo ID应该与请求发送的响应相匹配,并且必须在断言上验证数字签名。为此,您需要信任IdP的公共验证证书,并且可能还需要进行吊销检查。

( 4.)注销呢?

  • SAML2.0还为单个LogOut (SLO)定义了一个概要文件。这不仅会使您退出SP,而且还会记录IdP,以及您可能与之建立会话的任何其他SP。它具有与单点登录(SSO)相似的请求/响应流,因此设置和检查(状态代码、签名等)的事情也是相似的。

因此,简而言之-这可能是相当复杂的实现从零。最好使用尝试过的&真正的库和/或像Ian建议的产品。像他这样的公司已经投入了数百个小时的开发时间来按照规范实现,并测试了与其他供应商的互操作性。

票数 47
EN

Stack Overflow用户

发布于 2011-04-17 21:50:04

如果您只是尝试将单个Java应用程序设置为服务提供者,则应该考虑使用来自甲骨文 (作为独立的)或ForgeRock (与OpenAM捆绑在一起)的Fedlet。作为身份提供者,ForgeRock Fedlet与Shibboleth2.2.1交互存在一些问题,但我发现它的配置有点简单,而且提供了更多的信息。

每个指令都包含在自述文件中,以帮助您进行部署。一旦配置了Fedlet并与IDP通信,成功页面将显示将联邦SSO集成到应用程序中所需的所有代码。它完成了发送和接收AuthnRequests和响应的后台工作。

Scott的回答很好地回答了您所遇到的问题,但我认为,尝试自己编写生成SAML的代码是在重新发明轮子。Fedlet正是根据这个用例设计的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5502231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档