本教程系列的第 4 部分不会重复累述 Salesforce 联合单点登录 (SSO) 的基础知识。本教程主要将探讨如何使用 IBM® WebSphere DataPower(下文简称 DataPower)作为身份提供程序,实现服务提供程序向 Salesforce 发起的 SSO(受一个已加密和签名的 SAML 断言支持)。图 1 和图 2 给出了此解决方案的总体概括图。
图 1. 服务提供程序向 Salesforce 发起的 SSO 登录的概括图
图 2. 服务提供程序发起的 SSO 登录流程
回页首
这一节将提供在 Force.com 平台上实现单点登录设置的步骤。如果已经实现了本系列教程所演示的所有示例,则无需重复同样的步骤。但是,请确保您已经配置了本示例所需的额外步骤。
回页首
首先,在 Salesforce 开发人员站点 上创建一个用户帐户(Salesforce 管理员)(如果还没有帐户)。图 3 显示了 Salesforce 用户(开发人员版)注册过程。
图 3. 在 Salesforce 开发人员站点上创建 Salesforce 用户帐户(开发人员版)
点击查看大图
关闭 [x]
图 3. 在 Salesforce 开发人员站点上创建 Salesforce 用户帐户(开发人员版)
输入在注册过程中获得的凭据来登录到 Salesforce,然后创建另一个用户帐户。确保您按照图 4 中所示输入了一个联合 ID,以便对这个用户帐户启用 SSO 登录。
用户 ID: sdfc.user@sdfc.com
联合 ID: sdfc.user@sso.sdfc.com
图 4. 输入一个联合 ID 来启用 SSO
图 5 显示了一个 Salesforce 用户详细信息页面。本教程系列演示的示例使用了下面这个示例用户帐户来执行 SSO 设置。强烈建议 不要 对您组织的 Salesforce 管理员启用 SSO 特性,因为身份提供程序 (DataPower) 应用程序的任何中断都会阻止所有管理活动的运行。
图 5. Salesforce 上的示例用户帐户详细信息
点击查看大图
关闭 [x]
回页首
证书用于向外部身份提供程序执行经过验证的单点登录。您需要一个 Salesforce 证书,供服务提供程序发起的 SSO 对 Force.com 端的 SAML 身份验证请求执行签名,以及验证身份提供程序端的相同签名。在本示例中,身份提供程序还使用了 Salesforce 证书对 SAML 断言响应进行了加密。在创建证书后,下载它并将它保存到您的本地系统中。本教程系列演示的示例使用下面这个自签名证书(标签: Salesforce SSO ),如图 6 和图 7 所示。
图 6. Salesforce 上的自签名证书列表
点击查看大图
关闭 [x]
图 7. 证书(标签:Salesforce SSO)详细信息页面
点击查看大图
关闭 [x]
回页首
使用 My Domain (图 8),您可以定义一个自定义的 Salesforce 域名。这个名称可帮助您以多种方式更好地管理您组织的登录和身份验证。请参阅 Salesforce 文档,了解有关域管理的详细信息。本教程系列演示的示例使用了以下域名。我们建议对您的组织使用一个合适的域名。一个域名示例: https://dipak-sdfc-dev-ed.my.salesforce.com/ 。
图 8. Salesforce 上的 My Domain 概述页面
点击查看大图
关闭 [x]
回页首
图 9. Salesforce 上的 SAML SSO 设置
点击查看大图
关闭 [x]
图 10. SAML SSO 设置详细信息
点击查看大图
关闭 [x]
https://<host:port>/sso/salesforce/saml/request ),以便 Force.com 可将请求重定向到身份提供程序的 SSO 登录 URL。本教程中使用的 SAML 断言已加密,它在 Subject 陈述中的 NameIdentifier ( NameID ) 字段中包含登录用户的 联合 ID 。 https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC&sc=0LEF0000000Kytb )。 转到 Setup > Domain Management > My Domain ,编辑 Login Page Branding 并选择合适的 Authentication Service 。这个 Login Page Branding 设置在特定于域的登录页面上显示 SSO 登录选项,如图 11 和图 12 所示。
图 11. My Domain 上的 Login Page Branding
图 12. 包含自定义 SSO 提供程序的特定于域的登录页面
点击查看大图
关闭 [x]
回页首
这一节将介绍开发必要 DataPower 工件的步骤,主要包括 HTTPS 前端处理函数、一个包含需要的处理策略的多协议网关,以及一个 AAA 策略。
回页首
temporary:// 目录下载它(图 14)。如果已经实现了本教程系列中的所有示例,那么可以重用同样的加密配置。确保您配置了一个加密验证凭据,其中包含第 2 步中下载的 Salesforce 证书。 图 13. 本示例中使用的 DataPower 加密密钥
图 14. 本示例中使用的 DataPower 加密证书
图 15. 导入 Salesforce 证书来配置加密证书
图 16. 配置加密身份凭据
图 17. 配置加密验证凭据
图 18. 配置加密配置文件
图 19. 配置 SSL 代理配置文件
回页首
创建一个 HTTPS 前端处理函数(图 20)来接受来自浏览器的 SSO 请求。
图 20. 配置 HTTPS 前端处理函数
点击查看大图
关闭 [x]
回页首
使用动态后端路由创建一个多协议网关(图 21)。另外,确保为请求和响应数据类型都选择了 Non-XML ,以便处理 HTTP 格式数据和 HTML 数据。下一节(第 9 步)将介绍多协议网关策略的详细信息。
图 21. 配置多协议网关
点击查看大图
关闭 [x]
回页首
使用以下处理规则创建一个多协议网关策略:
方向:客户端到服务器。
/favicon.ico var://service/mpgw/skip-backside 图 22. 处理来自浏览器的 favicon.ico 请求的多协议网关策略规则
点击查看大图
关闭 [x]
此规则处理来自服务提供程序的 SSO 登录请求,这些请求使用 HTTP POST 绑定来通过浏览器重定向。此规则执行以下活动序列:
/AuthnRequest/@AssertionConsumerServiceURL 属性中提取 Salesforce 登录 URL。 https://dipak-sdfc-dev-ed.my.salesforce.com )。 规则配置详细信息为:
方向:客户端到服务器(图 23)。
图 23. 处理来自服务提供程序的 SSO 登录请求的多协议网关策略规则
点击查看大图
关闭 [x]
/sso/salesforce/saml/request 备注: 依据您组织的标准来使用合适的 URL。 图 24. 操作:将查询参数转换为 XML
此操作解码 (base-64) SAML 身份验证请求并从 /AuthnRequest/@AssertionConsumerServiceURL 属性提取 Salesforce 登录 URL。清单 1 给出了用于此转换的 XSLT。
清单 1. XSLT [process-saml-auth-request.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="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <xsl:variable name="vRelayState" select="/*[local-name()='request']/*[local-name()='args']/*[local-name()='arg' and @*[local-name()='name' and normalize-space(.) = 'RelayState']]/text()"/> <dp:set-variable name="'var://context/saml/auth-request/RelayState'" value="$vRelayState"/> <xsl:variable name="vSAMLRequest" select="/*[local-name()='request']/*[local-name()='args']/*[local-name()='arg' and @*[local-name()='name' and normalize-space(.) = 'SAMLRequest']]/text()"/> <xsl:variable name="vSAMLRequestXML" select="dp:parse($vSAMLRequest,'base-64')"/> <dp:set-variable name="'var://context/saml/auth-request/sdfcLoginURL'" value="$vSAMLRequestXML/*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:protocol' and local-name()='AuthnRequest']/@AssertionConsumerServiceURL"/> <xsl:copy-of select="$vSAMLRequestXML"/> </xsl:template> </xsl:stylesheet>
图 25. 操作:转换
点击查看大图
关闭 [x]
验证签名(图 26)
此操作验证来自 SAML 身份验证请求的签名。
图 26. 操作:验证
创建一个 AAA 策略来验证 SAML 身份验证请求 发出方 。请参阅第 10 步了解 AAA 配置的详细信息。
图 27. 操作:AAA(SAML 身份验证请求发出方身份验证)
创建另一个 AAA 策略来验证用户和生成 SAML 断言 XML。请参阅第 11 步,了解有关 AAA 配置的详细信息。
图 28. 操作:AAA(用户身份验证和 SAML 断言生成)
使用所提供的 XSLT ( remove-specific-attribute.xsl )(如清单 2 中所示) 从 < SubjectConfirmationData > 元素中删除 @NotBefore 属性,因为 Salesforce SAML Assertion Validator Framework 不支持此属性。
图 29. 在转换操作中使用 XSLT 从 SAML 断言 XML 中删除属性
清单 2. 从 SAML 断言 XML 中删除一个特定属性的 XSLT [remove-specific-attribute.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="xml" version="1.0" encoding="UTF-8" indent="no"/> <xsl:strip-space elements="*"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="/*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:protocol' and local-name()='Response']/*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:assertion' and local-name()='Assertion']/*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:assertion' and local-name()='Subject']/*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:assertion' and local-name()='SubjectConfirmation']/*[namespace-uri() ='urn:oasis:names:tc:SAML:2.0:assertion' and local-name() ='SubjectConfirmationData']/@NotBefore"/> </xsl:stylesheet>
加密(图 30)
此操作使用 Salesforce 证书加密 SAML 断言。创建一个文档加密映射,指定以下 XPATH(清单 3),如图 31 所示。
清单 3. 文档加密映射中使用的 XPATH
/*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:protocol' and local-name()='Response']/*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:assertion' and local-name()='Assertion']
图 30. 加密 SAML 断言
点击查看大图
关闭 [x]
图 31. 创建一个用于加密的文档加密映射
点击查看大图
关闭 [x]
此操作对已加密的 SAML 断言 XML 执行数字签名(XPATH: /*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:protocol' and local-name()='Response'] ),方法是使用第 6 步中生成的 DataPower 加密密钥和证书。
图 32. 对 SAM 断言 XML 执行签名
点击查看大图
关闭 [x]
此操作生成一个 HTML 页面,其中包含一个包含 HTTP POST 操作的 HTML FORM,包含个 base-64 编码的 SAML 断言 XML 和 RelayState 作为隐藏的参数。图 33 显示了在成功验证后 DataPower 响应的一个示例 HTML 页面。使用清单 4 中所示的 XSLT ( SSO-Generate-HTML-SP.xsl ),本教程的下载部分中也有提供。
图 33. 生成 HTML 响应的 XSLT 转换
点击查看大图
关闭 [x]
清单 4. 生成 HTML 页面的 XSLT [SSO-Generate-HTML-SP.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:variable name="relayState" select="dp:variable('var://context/saml/auth-request/RelayState')"/> <xsl:variable name="sdfcLoginURL" select="dp:variable('var://context/saml/auth-request/sdfcLoginURL')"/> <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><h2>Welcome<span><i><b> <xsl:value-of select="dp:variable('var://context/WSM/identity/username')"/></b></i> </span></h2></div> <div> <h4> <p>Clicking Submit button will redirect you to Salesforce home page</p> <p>Please contact <a href="mailto:support@example.com">support@example.com</a> if you experience any issues during Salesforce Login</p></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"> <input type="hidden" name="RelayState"> </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> var://service/mpgw/skip-backside 图 34. 跳过后端路由的高级操作
图 35. 结果操作
回页首
这个 AAA 策略从 SAML 身份验证请求中提取 issuer 作为一个自定义令牌,并向 AAA 策略信息文件执行验证,如清单 5 所示:
XPATH: /*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:protocol' and local-name()='AuthnRequest'] /*[namespace-ri()='urn:oasis:names:tc:SAML:2.0:assertion' and local-name()='Issuer']/text()
图 36、图 37 和图 38 给出了 AAA 策略配置的详细信息。
清单 5. 示例 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>
图 36. AAA:从 SAML 身份验证请求 XML 中提取一个自定义令牌
图 37. AAA:向 AAA 策略信息 XML 验证 SAML 身份验证请求发出方
图 38. AAA:授权任何经过验证的客户端
点击查看大图
关闭 [x]
回页首
图 39. AAA 策略 – 从请求中提取身份
图 40. AAA 策略 – 验证用户
图 41. AAA 策略 – 授权请求
https://datapowersso.ibm.com/ )。 图 42. AAA 策略 – 生成 SAML 断言响应
点击查看大图
关闭 [x]
图 43. AAA 策略 – SAML 属性
点击查看大图
关闭 [x]
回页首
https://dipak-sdfc-dev-ed.my.salesforce.com/005?retURL=%2Fui%2Fsetup%2FSetup%3Fsetupid%3DUsers &setupid=ManageUsers
图 44. Salesforce 登录页面(特定于域)
点击查看大图
关闭 [x]
图 45. DataPower 向用户质询登录凭据
https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghL&sc=0LEF0000000Kytb )。 图 46. 成功身份验证后的 SSO 重定向(HTTP POST 绑定)页面
点击查看大图
关闭 [x]
图 47. 成功 SSO 登录后的请求的资源页面
点击查看大图
关闭 [x]
假设您熟悉 DataPower 的常用调试和故障排除方法,因此本教程主要关注 Salesforce。
您可以使用 Google Chrome 中的 开发人员工具 捕获 base-64 加密的 SAML 身份验证请求,如图 48 和图 49 所示。尽管可以从 HTML 页面源代码中获取此数据,但使用 开发人员工具 或 Internet Explorer 可帮助您分析 HTTP 事件,包括请求/响应标头和数据结构。您可以使用任何在线工具(比如 http://www.string-functions.com/base64decode.aspx )解码 (base-64) 此数据,获取 SAML 身份验证请求 XML。清单 6 给出了一段示例 SAML 身份验证请求 XML。
图 48. 启动 Google Chrome 中的开发人员工具
图 49. 开发人员工具显示的 DataPower SSO 登录请求的 HTTP 表单数据
点击查看大图
关闭 [x]
清单 6. 已签名 SAML 身份验证请求的示例
<samlp:AuthnRequest AssertionConsumerServiceURL=">https://dipak-sdfc-dev-ed.my.salesforce.com? so=00DF0000000ghL&sc=0LEF0000000Kytb" Destination="https://100.99.99.99:80/sso/salesforce/saml/request" ID="_2_qtBx5CYOfeRPm783dL0kCopCzgOGJIGFCfNYWjZc_cKcRnB_jktE1lwIyXMSmnn8Phcmpv8e_xVZel9S Q_AoHf.ebf1pLAmMX4Wij1MFrVUtsMoHdBy2KwJFtuFFKG87GTQTUogXIw5AS5Q9Nx0esc8vg.Nzxp.sQ0a24rHa XK0i7KC3LUamo.zqwP.2VTYgPp.kI_jZFpSg1q7Oo2pwwC_xwKpoA" IssueInstant="2014-07-28T04:32:35.342Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"> <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"> https://dipak-sdfc-dev-ed.my.salesforce.com</saml:Issuer> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <ds:Reference URI="#_2_qtBx5CYOfeRPm783dL0kCopCzgOGJIGFCfNYWjZc_cKcRnB_jktE1lwIyXMSmnn8Phcmpv8e_xVZel 9SQ_AoHf.ebf1pLAmMX4Wij1MFrVUtsMoHdBy2KwJFtuFFKG87GTQTUogXIw5AS5Q9Nx0esc8vg.Nzxp.sQ0a24r HaXK0i7KC3LUamo.zqwP.2VTYgPp.kI_jZFpSg1q7Oo2pwwC_xwKpoA"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14#"> <ec:InclusiveNamespaces PrefixList="ds saml samlp" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transform> </ds:Transforms> <ds:DigestMethod Algorithm="e>http://www.w3.org/2000/09/xmldsig#sha1"/> <ds:DigestValue>vPFOzywPaMuL2RR5A6kn2yMn1b0=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue>SXKNfCiYk6lzqrJNaeBLp0bT3FhI/iUvGFr9u+ncqmTm+0UyXo0t3qqHbENk+pN qXNIrwDFMP4NQJssHVfrEJt0k0XJ0Tr............................</ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate>MIIEcjCCA1qgAwIBAgIOAUdWZRxHAAAAABAQi70wDQYJKoZIhvcNAQEF BQAwfjEWMBQGA1UEAwwN...............................</ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </ds:Signature> </samlp:AuthnRequest>
您可以使用 Google Chrome 中的 开发人员工具 捕获 base64 编码的 SAML 断言响应数据,如图 50 所示。清单 7 给出了一段示例 SAML 断言 XML。
图 50. 从 HTML 页面源代码中捕获 base-64 编码的 SAML 断言 XML
点击查看大图
关闭 [x]
清单 7. 已加密和签名 SAML 身份验证响应的示例
<samlp2:Response Version="2.0" ID="SAML-55173ac1-93ab-4a69-a7f9-cbf85b0de345" IssueInstant="2014-07-28T04:31:35Z" InResponseTo="_2_qtBx5CYOfeRPm783dL0kCopCzgOGJIGFCfNYWjZc_cKcRnB_jktE1lwIyXMSmnn8Phcmpv 8e_xVZel9SQ_AoHf.ebf1pLAmMX4Wij1MFrVUtsMoHdBy2KwJFtuFFKG87GTQTUogXIw5AS5Q9Nx0esc8vg.Nzxp .sQ0a24rHaXK0i7KC3LUamo.zqwP.2VTYgPp.kI_jZFpSg1q7Oo2pwwC_xwKpoA" 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-55173ac1-93ab-4a69-a7f9-cbf85b0de345"> <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>W145ngU06DdGMAguqb6erN1WUcY=</DigestValue> </Reference> </SignedInfo> <SignatureValue>PC/ivOJSUdzK+3ErExxcO7Ukd5eP3Yzf14o5b/wiEGEKs2Vqz7pfzxukMWJPWcFKbG Br+il/kcGaqgzznAH50qWi7LtjR9YT.................................</SignatureValue> <KeyInfo> <X509Data> <X509Certificate>MIIDtzCCAp+gAwIBAgIIAhBEWantyAswDQYJKoZIhvcNAQEFBQAwQjELMAk GA1UEBhMCVVMxDDAKBgNVBAoTA0lCTTEMMAoGA1UECxMDR0JTMRcwFQYDVQQDEw5EQVRBUE9XRVItU0RGQzAeFw0 xNDA3MjEwMDA1NTNaFw0xNTA3MjEwM....................................</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:EncryptedAssertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"> <xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/> <dsig:KeyInfo xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> <xenc:EncryptedKey Recipient="name:Salesforce-SSO-Cert"> <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/> <dsig:KeyInfo> <dsig:KeyName>Salesforce-SSO-Cert</dsig:KeyName> </dsig:KeyInfo> <xenc:CipherData> <xenc:CipherValue>R+UanpDRYXazpVo4HgpUzK9/oZ2lzZvXM3gxvqhaoxE1zkuj1jU9 QKHScGbqcCc/loFM+0ga98oTx1TvRuA1...........................</xenc:CipherValue> </xenc:CipherData> </xenc:EncryptedKey> </dsig:KeyInfo> <xenc:CipherData> <xenc:CipherValue>+nnVWq3htwLPxTcHWMCUi0Y0J0AyGIyh2qJxYtm1WpEUJS/OmbrBfyW/jd tQbl8s8zRQk1Ns8NZWLzbmqBRU/NeDCqNDtejWPs8BM9EDGr4JKVA/nEWwggnyXu1/C7De42Tg/RQS6Y9w3Emuju QcsHLmCFuFeLRDnK5/rtJAvCA5J............................</xenc:CipherValue> </xenc:CipherData> </xenc:EncryptedData> </saml2:EncryptedAssertion> </samlp2:Response>
以管理员身份登录到 Salesforce 并验证 base-64 编码的 SAML 断言,检查 SSO 身份提供程序 (DataPower) 是否生成了 Salesforce 所期望的正确 SAML 断言。图 51 到图 54 显示了使用 Force.com 的 SAML Assertion Validator Framework 执行 SAML 断言验证的过程。
图 51. 启动 Salesforce 上的 SAML Assertion Validator Framework
点击查看大图
关闭 [x]
图 52. 将 base-64 编码的 SAML 断言输入到 Salesforce SAML Validator 中
图 53. 在 Salesforce SAML Validator 上成功验证 SAML 断言
点击查看大图
关闭 [x]
图 54. 包含过期的时间戳的无效 SAML 断言
点击查看大图
关闭 [x]
测试 SSO 登录期间,您可以监视一个 Salesforce 管理员登录名在 Force.com 上的登录历史。图 55 显示了 Force.com 站点上的登录历史页面,可以帮助您排除 SSO 登录故障。
图 55. Force.com 上的登录历史页面
点击查看大图
关闭 [x]
回页首
拥有较少 Salesforce 用户的组织可能不需要单点登录解决方案,因为他们可以继续使用 Salesforce 标准登录流程。但是,拥有大量 Salesforce 用户的组织可利用此解决方案,为其所有内部应用程序以及基于云的和外部应用程序(比如 Force.com)实现一个基于 DataPower 的单点登录基础架构,这支持使用外部 SSO 身份提供程序执行联合身份管理。
本教程(第 4 部分)是这个介绍使用 WebSphere DataPower 实现 Salesforce 联合单点登录的教程系列 的最后一部分。
回页首
| 描述 | 名字 | 大小 |
|---|---|---|
| 代码示例 | code_sample_part4.zip | 10KB |