sso saml_使用签名的SAML断言实现身份提供者发起的SSO

sso saml

随着越来越多的机构和组织在线提供服务和协作,员工需要访问内部部署和基于云的应用程序来进行日常工作。 这就要求实现单一登录(SSO)基础结构,使用户可以登录一次即可访问所有授权的内部和外部资源及应用程序。 具有大量Salesforce用户群的组织可以利用其现有的SSO基础结构将其实施到Force.com平台,该平台支持由外部SSO身份提供商提供的联合身份管理。 Force.com平台支持SSO的委派身份验证和联合身份验证。

本教程系列仅关注联合身份验证 ,它比委托身份验证具有多个优点,并且在IT行业中被广泛接受。 联合身份验证无法在Force.com平台上验证用户的实际密码。 相反,平台会在HTTP POST请求中接收安全性声明标记语言(SAML)声明。 SAML声明的有效期有限,包含唯一标识符,经过数字签名,并可以选择加密。 如果断言在其有效期内仍然有效,并且具有以前未使用过的标识符,并且具有来自可信身份提供者的有效签名,则将授予用户对所请求的资源或页面的访问权限。 使用IBM®WebSphere DataPower(以下称为DataPower)作为SSO身份提供程序,企业可以为所有内部应用程序和外部应用程序(例如Force.com)使用集中式管理界面来实现用户身份的单个注册表。支持联合单点登录。

本系列包括以下四个教程:

  1. 第1部分:身份提供者使用签名的SAML断言启动SSO(本教程)
  2. 第2部分:身份提供者使用加密并签名的SAML断言启动SSO
  3. 第3部分:服务提供商使用已签名的SAML断言启动SSO
  4. 第4部分:服务提供商使用加密并签名的SAML断言启动SSO

联合身份验证的工作方式

SAML提供了一种基于XML的安全解决方案,用于在身份提供商(例如DataPower)和服务提供商(例如Force.com)之间交换用户安全信息。 除了身份提供商启动的单点登录之外,SAML 2.0还支持服务提供商启动的单点登录。 这样,Force.com之类的服务提供商就可以查询身份提供商以进行身份​​验证。 SAML 2.0还添加了一个称为“单次注销”的有用功能,该功能定义了一种机制,可以快速,轻松地注销所有服务提供者。

参与SAML交易的各方

SAML交易涉及三方:

  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.身份提供商启动了SSO登录到Salesforce
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第1张图片
图2.身份提供者启动的SSO登录过程
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第2张图片

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

本节介绍了在Force.com平台上进行单点登录设置的分步指南。

步骤1:创建Salesforce用户帐户

  1. 首先,如果您尚未创建一个用户帐户(Salesforce管理员),则在Salesforce开发人员站点上 。 图3显示了Salesforce用户(开发人员版)的注册过程。
    图3. Salesforce用户帐户(Developer Edition)的创建
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第3张图片
  2. 通过输入在注册过程中获得的凭据登录到Salesforce ,并创建另一个用户帐户。 确保输入如图4所示的联合身份验证ID,以启用该用户帐户的SSO登录。 图5显示了一个Salesforce用户详细信息页面。 本教程系列说明的示例使用以下示例用户帐户进行SSO设置。 我们强烈建议您不要启用登录功能,为您的组织的Salesforce管理员单,因为身份提供者(DataPower的)应用程序的任何中断将阻止所有管理有关的活动。

    用户ID: [email protected]

    联盟ID: [email protected]

    图4.输入联合身份验证ID以启用SSO
    输入联盟ID以启用SSO
    图5. Salesforce上的用户帐户(标准平台用户)详细信息
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第4张图片

步骤2:创建自签名或CA签名的证书

  1. 证书用于与外部身份提供商进行经过身份验证的单点登录。 如果身份提供者生成的SAML声明未加密,则可能不需要身份提供者发起的SSO的Salesforce证书。
  2. 创建证书后,将其下载并保存到本地系统中。 本教程系列说明的示例使用以下自签名证书(标签: Salesforce SSO ),如图6和图7所示。
    图6. Salesforce上的自签名证书列表
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第5张图片
    图7.自签名证书(标签:Salesforce SSO)详细信息页面
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第6张图片

步骤3:管理Salesforce网域

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

图8. Salesforce上的“我的域”概述
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第7张图片

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

  1. 以Salesforce管理员身份登录,然后转到设置>安全控制>单一登录设置 确保在“使用SAML联合单一登录”选项卡上选中了“ 启用S​​AML”复选框,然后单击“ SAML单一登录设置”选项卡上的“ 新建”按钮。 图9和图10显示了本教程使用的Salesforce SSO设置。 在Force.com平台上进行此SSO设置之前,请确保您已经创建了DataPower加密密钥和相关的证书,如步骤5所述 。
  2. 将DataPower证书上载为身份提供者证书 ,以便Force.com平台可以验证与SAML断言关联的签名。
  3. 使用在步骤2中生成的自签名或CA签名证书作为“签名证书”。 颁发者实体ID字段输入适当的值。 本示例中使用的SAML声明未加密,并且在Subject语句的NameIdentifier( NameID )字段中包含登录用户的联盟ID
  4. 保存SAML单一登录设置(图9)后,记下Salesforce登录URL(例如, https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC )。
    图9. Salesforce上的SAML单一登录设置
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第8张图片
    图10. Force.com上的SAML单点登录设置详细信息
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第9张图片

将DataPower配置为单点登录身份提供者

以下步骤描述了如何开发必要的DataPower工件,该工件主要由HTTPS前端处理程序,包含所需处理策略规则的多协议网关和AAA策略组成。

步骤5:管理DataPower加密密钥

  1. 使用DataPower加密工具生成一个加密密钥和一个自签名(或CA签名)证书,如图11和图12所示,这是安全HTTP(SSL)连接和签名生成所必需的。 创建DataPower证书后,请从temporary://目录下载该证书。
    图11.本示例中使用的DataPower加密密钥
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第10张图片
    图12.本示例中使用的DataPower加密证书
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第11张图片
  2. 创建如图13所示的加密证书,然后导入在步骤2中下载的Salesforce证书。 但是,您可以跳过创建此加密证书的步骤,因为此示例生成的SAML声明未加密。
    图13.配置加密证书并导入Salesforce证书
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第12张图片
  3. 使用DataPower加密密钥创建加密标识凭证,这对于SSL设置是必需的(图14)。
    图14.使用DataPower加密密钥配置加密标识凭证
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第13张图片
  4. (可选)创建一个加密验证凭据并添加所需的客户端(例如,浏览器)证书,如图15所示。如果不执行SSL客户端证书验证,则可能不需要加密验证凭据。 您也可以选择添加Salesforce证书,此示例不需要此证书。 但是,如果您实施服务提供商发起的SSO来验证与SAML身份验证请求关联的签名,则将需要它。
    图15.配置加密验证凭证
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第14张图片
  5. 创建一个加密配置文件,并添加加密标识凭证和加密验证凭证(图16)。 但是,如果不强制执行客户端(例如,浏览器)SSL证书验证,则可以跳过添加加密验证凭据的操作。
    图16.配置加密配置文件
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第15张图片
  6. 使用反向SSL方向创建一个SSL代理配置文件(图17),并使用在上一步中创建的加密配置文件。
    图17.配置SSL代理配置文件
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第16张图片

步骤6:建立HTTPS前端处理常式

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

图18.配置一个HTTPS前端处理程序
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第17张图片

步骤7:创建多协议网关

创建具有动态后端路由的多协议网关(图19)。 确保为请求和响应数据类型选择“ 非XML ”以处理HTTP表单数据和HTML数据。 下一步(步骤8)描述了多协议网关策略的详细信息。

图19.配置多协议网关
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第18张图片

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

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

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

    方向:客户端到服务器。

    1. 动作:比赛
      匹配类型: URL
      网址匹配: /favicon.ico
    2. 行动:高级[设置变量]
      变量名称: var://service/mpgw/skip-backside
      变量分配: 1
    3. 行动:结果
      图20.用于处理来自浏览器的favicon.ico请求的多协议网关策略规则
      sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第19张图片
  • 第二条规则:该规则处理来自浏览器的SSO登录请求,该请求是由用户直接使用DataPower SSO登录URL发起的(图21)。
    图21.多协议网关策略规则,用于处理来自浏览器的SSO登录请求
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第20张图片

    方向:客户端到服务器。

    1. 动作:比赛
      匹配类型: URL
      URL匹配: /sso/salesforce/login 注意:根据组织的标准使用适当的URL。
    2. 动作: AAA
      按照步骤9中所述创建AAA策略。
    3. 行动:变形(见图22)

      使用清单1中所示的XSLT( remove-specific-attribute.xsl )从< SubjectConfirmationData >元素中删除@NotBefore属性,因为Salesforce SAML断言验证器框架不允许该属性。

      图22.在转换操作中使用XSLT从SAML断言XML中删除属性
      sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第21张图片
      清单1. XSLT [remove-specific-attribute.xsl]从SAML断言XML中删除特定属性
      
         
      
         
         
            
               
            
         
         
      
    4. 行动:签署(见图23)

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

      图23. Sign SAML断言XML
      sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第22张图片
    5. 动作:变换(参见图24)

      Transform操作将生成一个HTML页面,该页面包括带有HTTP POST操作HTML FORM,并包含以base-64编码的SAML断言XML作为隐藏参数。 图34显示了成功认证后DataPower响应的示例HTML页面。 使用清单2中所示的XSLT( SSO-Generate-HTML-Idp.xsl )进行此操作。 确保使用在步骤4中获得的适当的Salesforce登录URL(XSLT变量: sdfcLoginURL )更新XSLT。

      图24. XSLT转换以生成HTML响应
      sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第23张图片
      清单2. XSLT [SSO-Generate-HTML-Idp.xsl]生成HTML页面
      
      
         
         
            
            
               
            
            
            
               
                  Login to Salesforce
                  
                  
                  
                  
                  
               
               
                  
      Salesforce Login

      Welcome

      Clicking Submit button will redirect you to Salesforce home page

      Please contact [email protected] if you experience any issues during Salesforce Login



    6. 行动:高级[设置变量](见图25)
      变量名称: var://service/mpgw/skip-backside
      变量分配: 1
      图25.高级操作以跳过后端路由
      sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第24张图片
    7. 行动:结果(见图26)
      图26.结果操作
      sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第25张图片

步骤9:创建AAA策略

  1. 创建AAA策略以对用户进行身份验证,并通过成功的身份验证生成SAML声明。 本教程系列说明的示例使用基本的HTTP身份验证方法,并使用DataPower AAA info文件验证用户凭据,如清单3所示。但是,您可以根据组织的标准实施适当的身份验证方法。 图27至图30描述了AAA策略的配置细节。
    图27. AAA操作
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第26张图片
    图28. AAA策略–从请求中提取身份
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第27张图片
    图29. AAA策略–验证用户
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第28张图片
    图30. AAA策略–授权请求
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第29张图片
    清单3.示例AAA策略信息文件
    
    
       1
       local:///AAAInfoPolicy.xml
       AAA Policy Info XML file
       
          dipakpal
          dipakpal-password
          [email protected]
       
       
          sdfc.user
          sdfc-password
          [email protected]
       
       
          https://dipak-sdfc-dev-ed.my.salesforce.com
          saml.auth.request.issuer
       
       
          CN=Alice, O=DataPower, L=Cambridge, ST=MA, C=US
          admin
       
       
          127.0.0.1
          admin
       
       
          ::1
          admin
       
       
          guest
          guest
          user
       
       
          [email protected]
          /sso/*
          allow
       
       
          [email protected]
          /sso/*
          allow
       
       
          saml.auth.request.issuer
          /sso/*
          allow
       
       
          guest
          /sso/salesforce
          deny
       
       
          admin
          /sso/salesforce
          allow
       
       
          
             3
             0
             sha1WithRSAEncryption
             C=US, ST=MA, L=Cambridge, O=DataPower, CN=Alice
             2002-11-23T01:15:33Z
             2012-11-23T01:15:33Z
             C=US, ST=MA, L=Cambridge, O=DataPower, CN=Alice
             rsaEncryption
             
          
          /sso/*
          allow
       
    
  2. 配置此AAA访问控制策略以通过身份验证成功生成SAML声明响应。 图31显示了启用SAML声明的AAA访问控制策略页面。 确保使用在Salesforce SSO设置过程中配置的同一SAML颁发者(例如https://datapowersso.ibm.com/ )( 步骤4 )。 从Salesforce SSO设置( 第4步 )的“ SAML受众”字段中输入实体ID值。 将Salesforce登录URL用于“ SAML收件人”和“响应目标”字段。 创建SAML属性定义,如图32所示。
    图31. AAA策略–生成SAML断言响应
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第30张图片
    图32. AAA策略– SAML属性
    sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第31张图片

步骤10:测试单点登录

在Web浏览器中输入您的身份提供者(例如DataPower)SSO登录URL(例如https:///sso/salesforce/login ),如图33所示。成功认证后,DataPower响应带有SSO重定向(HTTP POST绑定)页面,如图34所示,其中包括带有HTTP POST ActionHTML FORM,并包含base-64编码的SAML断言XML和RelayState作为隐藏参数。 它需要用户交互才能通过单击“ 登录到Salesforce”按钮来提交HTML页面,从而导致向Salesforce登录URL(例如https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC提交HTTP POST请求https://dipak-sdfc-dev-ed.my.salesforce.com?so=00DF0000000ghLC )。

Salesforce使用SAML断言XML中的嵌入式签名针对DataPower证书来验证消息的完整性,该证书已在SSO设置过程中上载。 成功进行签名验证后,它将处理SAML断言语句,提取并验证联合身份验证ID,最后重定向到最初请求的页面。 图35显示了此示例成功尝试SSO登录后的Salesforce登录页面。

图33.用户通过Web浏览器尝试SSO登录
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第32张图片
图34.成功认证后的SSO重定向(HTTP POST绑定)页面
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第33张图片
图35.成功登录SSO后的销售目标页面
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第34张图片

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

假设您熟悉DataPower的常见调试和故障排除过程,那么本教程主要侧重于Salesforce。

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

图36.在谷歌浏览器中启动开发人员工具
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第35张图片
图37.从HTML捕获base-64编码的SAML断言XML
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第36张图片
清单4.示例SAML声明XML(签名)

   
https://datapowersso.ibm.com/
   
      
         
         
         
            
               
               
            
            
            1hL2WyVjm9cYVUUrOWWUTc4zN5I=
         
      
      wZm0YCeXOlsEfepgf+a7LOW6I/PXbycIt0JQA1XJ1lU57VT5rxw2cSdGziqYw
pNT3wai7oPLdsSmzSuTkiocOjfT6BJSUJnebED/m4irUOcTa.....................
      
         
            MIIDtzCCAp+gAwIBAgIIAhBEWantyAswDgMBAAGjgbAwga0wDAYDVR0TBAU
wAwEB/zAdBgNVHQ4EFgQUW0S1wlYr4NrKH41aKejdlM0o1RQwcQ...................
            
               CN=DATAPOWER-SDFC, OU=GBS, O=IBM, C=US
               148693939596937227
            
         
      
   
   
      
   
   
      https://datapowersso.ibm.com/
      
         
[email protected]
         
            
         
      
      
         
            https://dipak-sdfc-dev-ed.my.salesforce.com
         
      
      
         
         
            
urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified
         
      
      
         
            https://datapowersso.ibm.com/
         
         
            
         
      
   

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

图38.在Salesforce上启动SAML断言验证器框架
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第37张图片
图39.将base-64编码的SAML断言输入到Salesforce SAML Validator中
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第38张图片
图40.在Salesforce SAML验证器上成功的SAML断言验证
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第39张图片
图41.带有过期时间戳记的无效SAML断言
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第40张图片

在测试SSO登录名时,您可以以管理员身份通过单独的登录名来监视Force.com上的登录历史记录。 图42显示了Force.com站点上的登录历史记录页面,该页面可以帮助您解决SSO登录失败。

图42. Force.com的登录历史记录页面
sso saml_使用签名的SAML断言实现身份提供者发起的SSO_第41张图片

结论

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

要继续本系列,请参阅以下教程:

  • 第2部分:身份提供者使用加密并签名的SAML断言启动SSO
  • 第3部分:服务提供商使用已签名的SAML断言启动SSO
  • 第4部分:服务提供商使用加密并签名的SAML断言启动SSO

翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/1505_pal1/1505_pal1.html

sso saml

你可能感兴趣的:(sso saml_使用签名的SAML断言实现身份提供者发起的SSO)