zhaoyingkun
作者zhaoyingkun·2015-06-15 12:01
其它·北京林业大学

使用已签名的 SAML 断言实现身份提供程序发起的 SSO

字数 28804阅读 5909评论 0赞 0

简介

随着更多机构和组织在线提供服务和开展协作,员工既需要访问内部部署的应用程序,还需要访问基于云的应用程序才能完成其日常工作。这需要实现一种单点登录 (SSO) 基础架构,使用户只需登录一次,即可访问所有授权的内部和外部资源和应用程序。拥有大量 Salesforce 用户的组织可利用其现有的 SSO 基础架构,实现对 Force.com 平台的 SSO,这支持外部 SSO 身份提供程序所支持的联合身份管理。Force.com 平台同时支持对 SSO 执行委托和联合身份验证。

本教程只关注联合身份验证,它与委托身份验证相比有多种优势,在 IT 行业得到广泛接受。联合身份验证不会在 Force.com 平台上验证用户的实际密码。相反,该平台在一个 HTTP POST 请求中收到一个安全断言标记语言 (Security Assertion Markup Language, SAML) 断言。该 SAML 断言具有有限的有效期,包含一个唯一标识符,已经过数字签名,而且还可选择加密。如果断言在其有效期内仍有效,拥有之前未使用过的身份,而且拥有来自一个受信任身份提供程序的有效签名,则用户有权访问请求的资源或页面。使用 IBM® WebSphere DataPower(下文简称 DataPower)作为 SSO 身份提供程序,企业可实现单个用户身份注册表,为其所有支持联合单点登录的内部应用程序以及外部应用程序(例如 Force.com)提供一个集中化的管理界面。

联合身份验证的工作原理

SAML 提供了一个安全、基于 XML 的解决方案来在身份提供程序(比如 DataPower)和服务提供程序(比如 Force.com)之间交换用户身份信息。除了身份提供程序发起的单点登录,SAML 2.0 还支持服务提供程序发起的单点登录。这使 Force.com 等服务提供程序能够查询身份提供程序来执行身份验证。SAML 2.0 还添加了一个叫做 “单一注销” 的有用特性,该特性定义了一种快速且轻松地从所有服务提供程序注销的机制。

参与 SAML 事务的各方

一个 SAML 事务中有 3 个参与方:

  1. 身份提供程序(断言方):身份提供程序是提供 SAML 断言的权威系统。在本教程系列中,DataPower 是身份提供程序。
  2. 服务提供程序(回复方):服务提供程序就是系统,在本教程中为 Force.com,它信任身份提供程序的用户信息,使用该数据提供对请求的资源或页面的访问权。
  3. 用户(断言的主体):这是需要单点登录到 Force.com 的用户。

SAML 使用案例

SAML 有两个重要的使用案例:

  1. 身份提供程序发起的 SSO:用户直接请求 SSO 登录到身份提供程序,登录,然后重定向(HTTP POST 绑定)到服务提供程序上一个预先定义的着陆页面。
  2. 服务提供程序发起的 SSO:用户请求访问来自服务提供程序的一个受保护的资源或页面。服务提供程序通过一个 SAML 身份验证请求,将请求重定向(HTTP POST 或 REDIRECT 绑定)到身份提供程序。身份提供程序验证 SAML 身份验证请求,如果用户还未登录,则向用户质询登录凭据,然后使用 HTTP POST 绑定将 SAML 断言响应发送给服务提供程序。服务提供程序验证 SAML 断言,并重定向到最初请求的资源或页面。

Force.com 同时支持这两种使用案例。但是,本教程(第 1 部分)的范围仅限于身份提供程序发起的 SSO 登录,使用了一个已签名的 SAML 断言。

来自身份提供程序的 SAML 断言响应以属性和条件的形式包含标头信息、主体和有关该主体的断言语句。本示例中使用的 SAML 断言包含一个来自身份提供程序的联合 ID,该 ID 在 Force.com 平台中唯一并映射到一个 Force.com 用户,如图 1 和图 2 所示。

图 1. 身份提供程序向 Salesforce 发起的 SSO 登录

figure1.png

图 2. 身份提供程序发起的 SSO 登录流程

figure2.png

Force.com 平台上的单点登录设置

本节给出了在 Force.com 平台上设置单点登录的分步指南。

第 1 步:创建 Salesforce 用户帐户

1. 首先,在 Salesforce 开发人员站点 上创建一个用户帐户(Salesforce 管理员)(如果还没有帐户)。图 3 显示了 Salesforce 用户(开发人员版)注册过程。

图 3.创建 Salesforce 用户帐户(开发人员版)

figure3.jpg

输入在注册过程中获得的凭据登录到 Salesforce,然后创建另一个用户帐户。确保已按照图 4 中所示输入了一个联合 ID,以便为这个用户帐户启用 SSO 登录。图 5 显示了一个 Salesforce 用户详细信息页面。本教程系列演示的示例使用了下面这个示例用户帐户来执行 SSO 设置。我们强烈建议不要 对您组织的 Salesforce 管理员启用单点登录特性,因为身份提供程序 (DataPower) 应用程序的任何中断都会阻止所有管理活动的运行。

用户 ID:sdfc.user@sdfc.com

联合 ID:sdfc.user@sso.sdfc.com

图 4. 输入一个联合 ID 来启用 SSO

figure4.jpg

图 5. Salesforce 上的用户帐户(标准平台用户)详细信息

figure5.jpg

第 2 步:创建一个自签名或 CA 签名证书

1. 证书用于向外部身份提供程序执行经过验证的单点登录。如果某个身份提供程序生成的 SAML 断言没有加密,那么对于该身份提供程序发起的 SSO,可能不需要 Salesforce 证书。

2. 创建证书后,下载它并将它保存到您的本地系统中。本教程系列演示的示例使用了下面这个自签名证书(标签:Salesforce SSO),如图 6 和图 7 所示。

 图 6. Salesforce 上的自签名证书列表

figure6.jpg

图 7. 自签名证书(标签:Salesforce SSO)详细信息页面

figurea.jpg

第 3 步:管理 Salesforce 域

使用 “My Domain”,您可以定义一个自定义的 Salesforce 域名(参见图 8)。自定义的域名可帮助您以多种方式更好地管理您组织的登录和身份验证。请参阅 Salesforce 文档 了解域管理详细信息。本教程系列演示的示例使用了以下域名。我们建议为您的组织使用一个合适的域名。一个域名示例:https://dipak-sdfc-dev-ed.my.salesforce.com/

图 8. Salesforce 上的 My Domain 概述页面

figure8.jpg

第 4 步:在 Salesforce 上设置 SSO 设置

1. 以 Salesforce 管理员身份登录并转到 Setup > Security Controls > Single Sign-On Settings。确保已勾选了 Federated Single Sign-On Using SAML 选项卡上的 SAML Enabled 复选框,单击 SAML Single Sign-On Settings 选项卡上的 New 按钮。图 9 和图 10 给出了本教程使用的 Salesforce SSO 设置。在 Force.com 平台上执行此 SSO 设置之前,请确保您已创建了 第 5 步 中描述的 DataPower 加密密钥和相关的证书。

2. 上传 DataPower 证书作为一个身份提供程序证书,这样 Force.com 平台就可以验证与 SAML 断言有关联的签名。

3. 使用第 2 步中生成的自签名或 CA 签名证书作为 “签名证书”。在 IssuerEntity Id 字段中输入合适的值。本示例中使用的 SAML 断言未加密,它在 Subject 陈述中的 NameIdentifier (NameID) 字段中包含登录用户的联合 ID

4. 在保存 SAML 单点登录设置(图 9)后,记下 Salesforce 登录 URL(例如 https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC)。

图 9. Salesforce 上的 SAML 单点登录设置

figure9.jpg

图 10. Force.com 上的 SAML 单点登录设置详细信息

figure10.jpg

配置 DataPower 作为单点登录身份提供程序

以下步骤介绍了如何开发必要的 DataPower 工件,主要包含一个 HTTPS 前端处理函数、一个包含需要的处理策略规则的多协议网关,以及一个 AAA 策略。

第 5 步:管理 DataPower 加密密钥

1. 使用 DataPower 加密工具生成一个加密密钥和一个自签名(或 CA 签名)证书,如图 11 和图 12 所示,生成安全的 HTTP (SSL) 连接和签名需要它们。创建 DataPower 证书后,从 temporary:// 目录下载它。

图 11. 本示例中使用的 DataPower 加密密钥

figure11.jpg

图 12. 本示例中使用的 DataPower 加密证书

figure12.jpg

2. 创建一个加密证书,如图 13 所示,然后导入 第 2 步 中下载的 Salesforce 证书。但是,您可以跳过创建这个加密证书的步骤,因为本示例生成的 SAML 断言没有加密。 图 13. 配置加密证书并导入 Salesforce 证书

figure13.jpg

3. 使用 DataPower 加密密钥创建一个加密身份凭据,SSL 设置需要该凭据(图 14)。 图 14. 使用 DataPower 加密密钥配置加密身份凭据

figure14.jpg

4. 以下是可选操作:创建一个加密验证凭据并添加所需的客户端(例如浏览器)证书,如图 15 所示。如果不执行 SSL 客户端证书验证,那么有可能不需要加密验证凭据。也可以添加一个 Salesforce 证书,但本示例不需要它。但是,如果实现服务提供程序发起 SSO 来验证与 SAML 身份验证请求有关联的签名,则需要它。

图 15. 配置加密验证凭据

figure15.jpg

5. 创建一个加密配置文件,添加加密身份凭据和加密验证凭据(图 16)。但是,如果不执行客户端(例如浏览器)SSL 证书验证,那么可以跳过添加加密验证凭据的步骤。

图 16. 配置加密配置文件

figure16.jpg

使用 Reverse SSL Direction 创建一个 SSL 代理配置文件(图 17),使用上一步中创建的加密配置文件。

图 17. 配置 SSL 代理配置文件

figure17.jpg

第 6 步:创建 HTTPS 前端处理函数

创建一个 HTTPS 前端处理函数(图 18)来接受来自浏览器的 SSO 请求。

图 18. 配置 HTTPS 前端处理函数

figure18.jpg

第 7 步:创建多协议网关

使用动态后端路由创建一个多协议网关(图 19)。确保为请求和响应数据类型都选择了 Non-XML,以便处理 HTTP 格式数据和 HTML 数据。下一步(第 8 步)介绍多协议网关策略的详细信息。

图 19. 配置多协议网关

figure19.jpg

第 8 步:创建多协议网关策略

使用以下处理规则创建一个多协议网关策略:

  • 第一条规则:此规则处理来自浏览器的 favicon.ico 请求(图 20)。

    方向:客户端到服务器。

    1. 操作:匹配
      匹配类型:URL
      URL 匹配:/favicon.ico
    2. 操作:高级 [设置变量]
      变量名:var://service/mpgw/skip-backside
      变量赋值:1
    3. 操作:结果           

图 20. 处理来自浏览器的 favicon.ico 请求的多协议网关策略规则

figure20.jpg

第二条规则:此规则处理用户直接使用 DataPower SSO 登录 URL 发起的来自浏览器的 SSO 登录请求(图 21)。

图 21. 处理来自浏览器的 SSO 登录请求的多协议网关策略规则

figure21.jpg

方向:客户端到服务器。

1. 操作:匹配
匹配类型:URL
URL 匹配:/sso/salesforce/login备注:基于您组织的标准而使用合适的 URL。

2. 操作:AAA
按照 第 9 步 中的描述创建一个 AAA 策略。

3. 操作:转换(参见图 22)

使用清单 1 中所示的 XSLT (remove-specific-attribute.xsl) 从 <SubjectConfirmationData> 元素中删除 @NotBefore 属性,因为 Salesforce SAML Assertion Validator Framework 不支持此属性。

图 22. 在转换操作中使用 XSLT 从 SAML 断言 XML 删除属性

figure22.jpg

清单 1. 从 SAML 断言 XML 中删除一个特定属性的 XSLT [remove-specific-attribute.xsl]

list1.png

4. 操作:签名(参见图 23)

此操作对 SAML 断言 XML 执行数字签名 (XPATH: /*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:protocol' and local-name()='Response']),方法是使用 第 5 步中生成的 DataPower 加密密钥和证书。

图 23. 对 SAM 断言 XML 进行签名

figure23.jpg

5. 操作:转换(参见图 24)

这个转换操作生成一个 HTML 页面,其中包含一个包含 HTTP POST 操作的 HTML FORM,包含一个 base-64 编码的 SAML 断言 XML 作为隐藏的参数。图 34 显示了在成功验证后 DataPower 响应的一个示例 HTML 页面。为此操作使用清单 2 中所示的 XSLT (SSO-Generate-HTML-Idp.xsl)。确保使用第 4 步 中获取的合适的 Salesforce 登录 URL 更新了该 XSLT(XSLT 变量:sdfcLoginURL) 。

图 24. 生成 HTML 响应的 XSLT 转换

figureb.jpg

清单 2. 生成 HTML 页面的 XSLT [SSO-Generate-HTML-Idp.xsl]

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" extension-element-prefixes="dp"

exclude-result-prefixes="dp" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:dp="http://www.datapower.com/extensions">

   <xsl:output method="html" omit-xml-declaration="yes"/>

   <xsl:template match="/">

      <xsl:param name="sdfcLoginURL"

select="'https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC'"/>

      <xsl:variable name="signedSamlSerialized">

         <dp:serialize select="/" omit-xml-decl="yes"/>

      </xsl:variable>

      <xsl:variable name="base64Samldata"

select="dp:encode($signedSamlSerialized,'base-64')"/>

      <html>

         <head>

            <title>Login to Salesforce</title>

            <meta http-equiv="Cache-Control" content="no-cache"/>

            <meta http-equiv="Pragma" content="no-cache"/>

            <meta http-equiv="Expires" content="-1"/>

            <meta http-equiv="X-UA-Compatible" content="IE=8"/>

            <style type="text/css">

.body{background-color: #3EB1D0;}

.data{

         background-color: #C6EDEC;

         margin-top: 10%;

         margin-left: 20%;

         margin-right: 20%;

         font-family: verdana;

         color: #0A6DA8;

}

.headline{font-size: 50px;}

.button{

         background-color: #F5DAA3;

         color: #0D75AA;

         font-size: x-large;

}

</style>

         </head>

         <body class="body">

            <div align="center" class="data">

               <div>

                  <form method="POST" enctype="application/x-www-form-urlencoded">

                     <xsl:attribute name="action">

                        <xsl:value-of select="$sdfcLoginURL"/>

                     </xsl:attribute>

                     <div class="headline">

                        <i><b>Salesforce Login</b></i>

                     </div>

                     <div>Welcome<span><i><b>

<xsl:value-of select="dp:variable('var://context/WSM/identity/username')"/></b></i>

                     </span></div>

                     <div>

                        <h4>

      

Clicking Submit button will redirect you to Salesforce home page

      

Please contact

<a href="mailto:support@example.com">support@example.com

          if you experience any issues during Salesforce Login

</h4>

                     </div>

                     <div>

                        <input type="hidden" name="idpConfig.recipient">

                           <xsl:attribute name="value">

                              <xsl:value-of select="$sdfcLoginURL"/>

                           </xsl:attribute>

                        </input>

                        <input type="hidden" name="SAMLResponse">

                           <xsl:attribute name="value">

                              <xsl:value-of select="$base64Samldata"/>

                           </xsl:attribute>

                        </input>

                        <input type="hidden" name="RelayState">

                           <xsl:attribute name="value">

                              <xsl:value-of select="''"/>

                           </xsl:attribute>

                        </input>

                     </div>

                     <br/>

                     <div>

    <input class="button" type="submit" name="submit" value="Login to Salesforce"/>

                     </div>

                     <br/>

                  </form>

               </div>

            </div>

         </body>

      </html>

</xsl:template>

</xsl:stylesheet>

4. 操作:高级 [设置变量](参见图 25)

变量名:var://service/mpgw/skip-backside
变量赋值:

图 25. 跳过后端路由的高级操作

figure25.jpg

7. 操作:结果(参见图 26)

图 26. 结果操作

figure26.jpg

第 9 步:创建 AAA 策略

创建一个 AAA 策略来验证用户,生成 SAML 断言作为成功身份验证的结果。本教程系列演示的示例使用一种基本的 HTTP 身份验证方法,并使用清单 3 中所示的 DataPower AAA 信息文件验证用户凭据。但是,您可依据您组织的标准而实现合适的身份验证方法。图 27 到 30 描述了 AAA 策略配置详细信息。

图 27. AAA 操作

figure27.jpg


图 28. AAA 策略 – 从请求中提取身份

figure28.jpg


图 29. AAA 策略 – 验证用户

figure29.jpg

图 30. AAA 策略 – 授权请求

figure30.jpg

清单 3. 示例 AAA 策略信息文件

<?xml version="1.0" encoding="utf-8"?>

<AAAInfo xmlns="http://www.datapower.com/AAAInfo">

   <FormatVersion>1</FormatVersion>

   <Filename>local:///AAAInfoPolicy.xml</Filename>

   <Summary>AAA Policy Info XML file</Summary>

   <Authenticate>

      <Username>dipakpal</Username>

      <Password>dipakpal-password</Password>

      <OutputCredential>dipakpal@sso.sdfc.com</OutputCredential>

   </Authenticate>

   <Authenticate>

      <Username>sdfc.user</Username>

      <Password>sdfc-password</Password>

      <OutputCredential>sdfc.user@sso.sdfc.com</OutputCredential>

   </Authenticate>

   <Authenticate>

      <CustomToken>https://dipak-sdfc-dev-ed.my.salesforce.com</CustomToken>

      <OutputCredential>saml.auth.request.issuer</OutputCredential>

   </Authenticate>

   <Authenticate>

      <DN>CN=Alice, O=DataPower, L=Cambridge, ST=MA, C=US</DN>

      <OutputCredential>admin</OutputCredential>

   </Authenticate>

   <Authenticate>

      <IPHost>127.0.0.1</IPHost>

      <OutputCredential>admin</OutputCredential>

   </Authenticate>

   <Authenticate>

      <IPHost>::1</IPHost>

      <OutputCredential>admin</OutputCredential>

   </Authenticate>

   <Authenticate>

      <Username>guest</Username>

      <Password>guest</Password>

      <OutputCredential>user</OutputCredential>

   </Authenticate>

   <Authorize>

      <InputCredential>dipakpal@saml.sdfc.com</InputCredential>

      <InputResource>/sso/*</InputResource>

      <Access>allow</Access>

   </Authorize>

   <Authorize>

      <InputCredential>sdfc.user@sso.sdfc.com</InputCredential>

      <InputResource>/sso/*</InputResource>

      <Access>allow</Access>

   </Authorize>

   <Authorize>

      <InputCredential>saml.auth.request.issuer</InputCredential>

      <InputResource>/sso/*</InputResource>

      <Access>allow</Access>

   </Authorize>

   <Authorize>

      <InputCredential>guest</InputCredential>

      <InputResource>/sso/salesforce</InputResource>

      <Access>deny</Access>

   </Authorize>

   <Authorize>

      <InputCredential>admin</InputCredential>

      <InputResource>/sso/salesforce</InputResource>

      <Access>allow</Access>

   </Authorize>

   <Authorize>

      <InputCredential>

         <Version>3</Version>

         <SerialNumber>0</SerialNumber>

         <SignatureAlgorithm>sha1WithRSAEncryption</SignatureAlgorithm>

         <Issuer>C=US, ST=MA, L=Cambridge, O=DataPower, CN=Alice</Issuer>

         <NotBefore>2002-11-23T01:15:33Z</NotBefore>

         <NotAfter>2012-11-23T01:15:33Z</NotAfter>

         <Subject>C=US, ST=MA, L=Cambridge, O=DataPower, CN=Alice</Subject>

         <SubjectPublicKeyAlgorithm>rsaEncryption</SubjectPublicKeyAlgorithm>

         <Extensions/>

      </InputCredential>

      <InputResource>/sso/*</InputResource>

      <Access>allow</Access>

   </Authorize>

</AAAInfo>

2. 配置这个 AAA 访问控制策略,以便在成功身份验证后生成一个 SAML 断言响应。图 31 显示了启用 SAML 断言的 AAA 访问控制策略页面。确保您使用了在 Salesforce SSO 设置期间(第 4 步)配置的相同 SAML 发出方(比如https://datapowersso.ibm.com/)。在 “SAML Audience” 字段中输入来自 Salesforce SSO 设置(第 4 步)的 Entity ID 值。在 “SAML Recipient” 和 “Response Destination” 字段中都使用了 Salesforce 登录 URL。创建 SAML 属性定义,如图 32 所示。

图 31. AAA 策略 – 生成 SAML 断言响应

figure31.jpg

图 32. AAA 策略 – SAML 属性

figure32.jpg

第 10 步:测试单点登录

在 Web 浏览器中输入您的身份提供程序(比如 DataPower)SSO 登录 URL(比如 https://<dp-host:port>/sso/salesforce/login),如图 33 所示。在成功身份验证后, DataPower 将以一个 SSO 重定向(HTTP POST 绑定)页面作为响应,如图 34 所示,其中包含一个具有 HTTP POST 操作的 HTML FORM,还包含一个 base-64 编码的 SAML 断言 XML 和 RelayState 作为隐藏参数。它需要一次用户交互,单击 Login to Salesforce 按钮来提交 HTML 页面,这会导致将一个 HTTP POST 请求提交到 Salesforce 登录 URL(比如 https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC)。

Salesforce 使用 SAML 断言 XML 中嵌入的签名,针对 DataPower 证书来验证消息完整性,该证书已在 SSO 设置过程中上传。在成功验证签名后,它会处理 SAML 断言陈述,提取并验证联合 ID,最终重定向到最初请求的页面。图 35 显示了本示例尝试 SSO 登录成功后的 Salesforce 着陆页(landing page)。

图 33. 用户通过 Web 浏览器进行的 SSO 登录尝试

figure33.jpg

图 34. 成功身份验证后的 SSO 重定向(HTTP POST 绑定)页面

figure34.jpg

图 35. 成功 SSO 登录后的 Sales 着陆页

figure35.jpg

第 11 步:调试和故障排除指南

假设您熟悉 DataPower 常见调试和故障排除流程,本教程将会主要介绍 Salesforce。

您可以使用 Google® Chrome 中的开发人员工具捕获 base-64 编码的 SAML 断言 XML(参见图 36 和图 37)。尽管可以从 HTML 页面源代码获取此数据,但使用开发人员工具Internet Explorer 可以帮助您分析 HTTP 事件,包括请求/响应标头和数据结构。您可以使用任何在线工具(比如 http://www.string-functions.com/base64decode.aspx)解码 (base-64) 此数据,获取 SAML 断言 XML。清单 4 给出了一段示例 SAML 断言 XML。

图 36. 启动 Google Chrome 中的开发人员工具

figure36.jpg

图 37. 从 HTML 捕获 base-64 编码的 SAML 断言 XML

figure37.jpg

清单 4. 示例 SAML 断言 XML(已签名)

<samlp2:Response Version="2.0" ID="SAML-88fe1652-686b-4ef6-b5d8-80643ddbd791"

IssueInstant="2014-07-27T21:36:09Z"

Destination="https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC"

xmlns:samlp2="urn:oasis:names:tc:SAML:2.0:protocol">

   <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">

https://datapowersso.ibm.com/</saml2:Issuer>

   <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

      <SignedInfo>

         <CanonicalizationMethod

Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>

         <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>

         <Reference URI="#SAML-88fe1652-686b-4ef6-b5d8-80643ddbd791">

            <Transforms>

               <Transform

Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>

               <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>

            </Transforms>

            <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>

            <DigestValue>1hL2WyVjm9cYVUUrOWWUTc4zN5I=</DigestValue>

         </Reference>

      </SignedInfo>

      <SignatureValue>wZm0YCeXOlsEfepgf+a7LOW6I/PXbycIt0JQA1XJ1lU57VT5rxw2cSdGziqYw

pNT3wai7oPLdsSmzSuTkiocOjfT6BJSUJnebED/m4irUOcTa.....................</SignatureValue>

      <KeyInfo>

         <X509Data>

            <X509Certificate>MIIDtzCCAp+gAwIBAgIIAhBEWantyAswDgMBAAGjgbAwga0wDAYDVR0TBAU

wAwEB/zAdBgNVHQ4EFgQUW0S1wlYr4NrKH41aKejdlM0o1RQwcQ...................</X509Certificate>

            <X509IssuerSerial>

               <X509IssuerName>CN=DATAPOWER-SDFC, OU=GBS, O=IBM, C=US</X509IssuerName>

               <X509SerialNumber>148693939596937227</X509SerialNumber>

            </X509IssuerSerial>

         </X509Data>

      </KeyInfo>

   </Signature>

   <samlp2:Status>

      <samlp2:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>

   </samlp2:Status>

   <saml2:Assertion Version="2.0"

ID="SAML-d5027598-fd26-4ada-a87c-55ccdfde26d2" IssueInstant="2014-07-27T21:36:09Z"

xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">

      <saml2:Issuer>https://datapowersso.ibm.com/</saml2:Issuer>

      <saml2:Subject>

         <saml2:NameID

Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">

sdfc.user@sso.sdfc.com</saml2:NameID>

         <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">

            <saml2:SubjectConfirmationData NotOnOrAfter="2014-07-27T21:44:09Z"

Recipient="https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC"/>

         </saml2:SubjectConfirmation>

      </saml2:Subject>

      <saml2:Conditions NotBefore="2014-07-27T21:33:09Z"

NotOnOrAfter="2014-07-27T21:44:09Z">

         <saml2:AudienceRestriction>

            <saml2:Audience>https://dipak-sdfc-dev-ed.my.salesforce.com</saml2:Audience>

         </saml2:AudienceRestriction>

      </saml2:Conditions>

      <saml2:AuthnStatement AuthnInstant="2014-07-27T21:36:09Z"

SessionNotOnOrAfter="2014-07-27T21:44:09Z">

         <saml2:SubjectLocality Address="100.99.99.99"/>

         <saml2:AuthnContext>

            <saml2:AuthnContextClassRef>

urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml2:AuthnContextClassRef>

         </saml2:AuthnContext>

      </saml2:AuthnStatement>

      <saml2:AttributeStatement>

         <saml2:Attribute Name="ssoStartPage"

NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">

            <saml2:AttributeValue>https://datapowersso.ibm.com/</saml2:AttributeValue>

         </saml2:Attribute>

         <saml2:Attribute Name="logoutURL"

NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">

            <saml2:AttributeValue/>

         </saml2:Attribute>

      </saml2:AttributeStatement>

   </saml2:Assertion>

</samlp2:Response>

以管理员身份登录到 Salesforce 并验证 base-64 编码的 SAML 断言,检查 SSO 身份提供程序 (DataPower) 是否生成了 Salesforce 所期望的正确的 SAML 断言。图 39 到 41 显示了使用 Force.com 的 SAML Assertion Validator Framework 执行 SAML 断言验证的过程。

图 38. 启动 Salesforce 上的 SAML Assertion Validator Framework

figure38.jpg

图 39. 将 base-64 编码的 SAML 断言输入到 Salesforce SAML Validator 中

figure39.jpg

图 40. 在 Salesforce SAML Validator 上成功验证 SAML 断言

figure40.jpg

图 41. 包含过期的时间戳的无效 SAML 断言

figure41.jpg

在测试 SSO 登录期间,您可监视一个管理员登录名在 Force.com 上的登录历史。图 42 显示了 Force.com 站点上的登录历史页面,可以帮助您排除 SSO 登录故障。

图 42. Force.com 上的登录历史页面

figure42.jpg

结束语

拥有较少 Salesforce 用户的组织可能不需要这个单点登录解决方案,因为他们可以继续使用 Salesforce 的标准登录流程。但是,拥有大量 Salesforce 用户的组织可以利用此解决方案,为其所有内部应用程序以及基于云的应用程序和外部应用程序(比如 Force.com)实现一个基于 DataPower 的单点登录基础架构,这支持使用外部 SSO 身份提供程序执行联合身份管理。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广