ibm tivoli_使用Tivoli Federated Identity Manager定制SAML 2.0

ibm tivoli

在分布式体系结构中使用多个第三方应用程序有很多好处,同时也带来一些挑战。 用户希望能够通过一次登录访问企业应用程序服务,这需要在一个身份验证和授权机制下集成不同的Web服务。 对于使用IBM Tivoli Federated Identity Manager的开发人员和管理员来说,显而易见的解决方案是建立一个联合的单点登录环境,一次登录授权访问多个应用程序。

SAML是用于创建联盟协议的最常用协议之一,它提供了一个用于描述和交换安全信息的基于XML模式的元数据框架。 供应商可能会以不同的方式解释和使用SAML,但是Tivoli Federated Identity Manager足够灵活以处理变化。

在本文中,学习如何利用Tivoli Federated Identity Manager的身份映射规则为单个登录体系结构定制SAML 2.0。 本文从Tivoli Federated Identity Manager的身份映射功能的简要介绍开始。 然后,它解释了如何使用身份映射来创建满足云服务提供商的身份验证和授权要求的SAML断言。

注意,本文适用于具有Tivoli Federated Identity Manager基本技能或高级技能的软件开发人员和管理员。

身份映射规则

服务提供商希望以SAML主题和属性列表的形式接收用户身份验证信息。 您可以使用Tivoli Federated Identity Manager的身份映射规则轻松地提供此信息。 清单1中所示的Tivoli Federated Identity Manager身份映射规则将称为federationid的属性插入SAML断言中。

清单1.身份映射规则
importPackage(Packages.com.tivoli.am.fim.trustserver.sts);
importPackage(Packages.com.tivoli.am.fim.trustserver.sts.uuser);

var authnMethodAttr = new Attribute("AuthnContextClassRef","urn:oasis:names:tc:SAML:2.0:assertion",
"urn:oasis:names:tc:SAML:2.0:ac:classes:Password"); 
var attributeContainer = stsuu.getAttributeContainer();

var prinAttr = attributeContainer.getAttributeValueByName("tagvalue_credattrs_name"); 
var principalAttr = new Attribute("name", 
"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", ""+prinAttr);

var wsfloginid = attributeContainer.getAttributeValueByName("tagvalue_credattrs_name");
var sflognid = new Attribute("sfloginid", "urn:ibm:names:ITivoli Federated Identity Manager:5.1:accessmanager", ""+wsfloginid);

stsuu.clear(); 
stsuu.clearAttributeList(); 
stsuu.addPrincipalAttribute(principalAttr);
stsuu.addAttribute(authnMethodAttr); 
stsuu.addAttribute(sflognid);

您可以将这样的身份映射规则插入现有的联盟协议中,或使用它添加新的联盟伙伴,我们将在后面演示。

添加联盟伙伴

只要将第三方应用程序或Web服务添加到企业中,就可以创建新的联盟伙伴。 在本节中,我们将逐步完成将新合作伙伴(在我们的示例中为云服务提供商Salesforce.com)添加到现有联盟的过程。 在本文的后面,我们将向您展示如何自定义给定服务提供商的登录要求。

  1. 登录到通过点击联合会在左侧面板,如图1中的Tivoli联合身份管理器管理控制台并导航到联邦页面。
    图1.导航到“联合身份验证”页面
    Tivoli Federated Identity Manager管理员控制台的屏幕快照。
  2. 选择联盟 ,然后点击添加合作伙伴
    图2.添加一个合作伙伴
    选择合作伙伴的控制台选项的屏幕快照。
  3. 提供新伙伴的元数据文件的位置。 您从合作伙伴处获得的元数据文件包含用于访问服务的URL以及证书信息。 完成后,单击“ 下一步”
    图3.提供联合元数据
    联盟元数据的位置字段的屏幕快照。
  4. 提供所需的签名验证信息,然后单击“ 下一步”
    图4.提供签名验证
    签名验证信息字段的屏幕截图。
  5. 不需要客户端身份验证,因此单击下一步
    图5.不需要身份验证
    不需要身份验证。
  6. 提供所需的合作伙伴设置信息,然后单击“ 下一步”
    图6.添加合作伙伴设置
    提供合作伙伴设置的字段的屏幕截图。
  7. 保留默认的SAML断言设置,然后单击“ 下一步”
    图7.保留默认的SAML断言
    保留默认SAML断言的选项的屏幕快照。
  8. 选择“ 使用XSL或JavaScript转换进行身份映射” ,然后单击“ 下一步”
    图8.选择XSL或JavaScript转换
    选择XSL或JavaScript。
  9. 使用清单1中创建的身份映射规则为文件的位置提供文件。
    图9.提供身份映射规则的位置
    提供身份映射文件位置的字段的屏幕快照。
  10. 查看摘要,然后单击完成
    图10.查看摘要
    评测总结。
  11. 点击启用合作伙伴
    图11.启用合作伙伴
    完。

通过这些步骤,您已经使用清单1中指定的标识映射规则配置了新的联合伙伴。 如果在Tivoli Federated Identity Manager中启用trace并捕获SAML断言,它将显示清单2中所示的注入的SAML属性。

清单2.具有SAML属性的输出
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
ID="Assertion-uuid7caf7d6f-013d-15e4-a142-cde6480fe8b0" IssueInstant="2013-03-18T08:48:28Z" 
Version="2.0">
....
<saml:AttributeStatement><saml:Attribute Name="portal_id" 
NameFor-mat="urn:ibm:names:ITivoli Federated Identity Manager:5.1:accessmanager">
<saml:AttributeValue xsi:type="xs:string">06090000000DWOy</saml:AttributeValue>
</saml:Attribute><saml:Attribute Name="sfloginid" 
NameFor-mat="urn:ibm:names:ITivoli Federated Identity Manager:5.1:accessmanager">
<saml:AttributeValue xsi:type="xs:string">15996</saml:AttributeValue>
</saml:Attribute></saml:AttributeStatement>
</saml:Assertion>

自定义SAML属性

服务提供商有时会请求自定义SAML 2.0消息以支持特定的访问控制要求或限制。 您可以使用Tivoli Federated Identity Manager来覆盖和定制表1中所示的SAML 2.0属性。

表1.可定制的SAML属性
设定编号 SAML属性 描述
1个 观众限制 指定将声明针对由<Audience>元素标识的一个或多个特定受众。
2 名称限定符 限定标识符的安全或管理域。 此属性提供了一种从不同的用户商店联合标识符而不会发生冲突的方法。
3 接受者 一个URI,它指定证明实体可以向其提出断言的实体或位置。 例如,此属性可能指示必须将断言传递到特定的网络终结点,以防止中介程序将其重定向到其他地方。
4 回应 SAML协议消息的ID,证明实体可以响应此ID来声明该断言。 例如,此属性可用于将声明与导致其表示的SAML请求相关联。

覆盖受众限制

在清单3中,Tivoli Federated Identity Manager的身份映射规则覆盖了SAML断言中的AudienceRestriction URL。

清单3.覆盖AudienceRestriction的SAML断言
importPackage(Packages.com.tivoli.am.fim.trustserver.sts);
importPackage(Packages.com.tivoli.am.fim.trustserver.sts.uuser);

var authnMethodAttr = new Attribute("AuthnContextClassRef","urn:oasis:names:tc:SAML:2.0:assertion",
"urn:oasis:names:tc:SAML:2.0:ac:classes:Password");
var attributeContainer = stsuu.getAttributeContainer();

var sfar = java.lang.reflect.Array.newInstance(java.lang.String, 1);
sfar[0] = "https://saml.salesforce.com";

var wsfloginid = attributeContainer.getAttributeValueByName("tagvalue_credattrs_name");

var AudienceRestriction = new Attribute("AudienceRestriction", null, sfar);
var principalAttr = new Attribute("name", "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
""+wsfloginid);

stsuu.clear();
stsuu.clearAttributeList();
stsuu.addAttribute(AudienceRestriction);
stsuu.addPrincipalAttribute(principalAttr);
stsuu.addAttribute(authnMethodAttr);

请注意,当使用命令通过身份映射规则添加属性时

var AudienceRestriction = new Attribute("AudienceRestriction", null, sfar)

它需要三个参数:

  1. 属性名称
  2. 属性类型
  3. 属性值

属性类型

表1中的每个属性都需要特定的属性类型,这些属性在表2中列出。

表2. SAML属性类型
设定编号 SAML属性 类型
1个 观众限制 空值
2 名称限定符 ur:绿洲:名称:tc:SAML:2.0:断言
3 接受者 空值
4 回应 空值

案例研究:Salesforce.com

假设我们的组织要使用来自Salesforce.com的两个Web服务,Chatter和Employee Portal。 与许多供应商一样,Salesforce.com也有特定的身份验证要求,身份提供者必​​须满足这些要求才能访问其服务。 要对Salesforce.com Web服务的用户进行身份验证,我们必须提供具有以下属性的SAML断言:

  • 每个联盟伙伴必须具有唯一的断言消费者服务 (ACS)URL
  • 每个联盟伙伴必须具有相同的实体ID

Salesforce.com仅提供一个元数据文件,该文件用于Employee Portal Web服务。 要添加第二个合作伙伴并访问Chatter服务,我们需要使用为Employee Portal提供的文件来自定义元数据。 当我们在元数据文件中编辑实体ID时,SAML中的AudienceRestriction URL也将被编辑,导致Salesforce.com拒绝SAML消息。 (使用身份映射规则,可以实时修改AudienceRestriction URL并将其插入SAML消息中。)

配置联盟伙伴

为了访问这两个Web服务并满足Salesforce.com的自定义身份验证要求,我们将与两个合作伙伴建立一个联合。 我们将逐步执行以下步骤。

步骤1.配置身份提供者

  1. 登录到Tivoli Federated Identity Manager管理控制台。 点击左侧面板联合会 ,然后单击创建
    图12.创建一个联合
    单击左侧面板中的联合。
  2. 提供联盟名称,然后选择身份提供者角色。 单击下一步
    图13.配置联盟
    命名联盟并选择其角色。
  3. 提供所需的组织信息,然后单击下一步
    图14.提供组织信息
    组织信息字段的屏幕快照。
  4. 选择SAML 2.0作为联合协议,然后单击“ 下一步”
    图15.选择联合协议
    选择SAML 2.0作为联盟协议。
  5. 提供联系点服务器信息,然后单击下一步
    图16.提供联系点
    添加联系人服务器。
  6. 选择典型作为配置文件选择,然后单击下一步
    图17.选择一个典型的配置文件
    选择典型的配置文件选项。
  7. 指定签名选项,然后单击“ 下一步”
    图18.指定签名选项
    指定签名选项。
  8. 指定加密选项,然后单击下一步
    图19.指定加密选项
    指定加密选项。
  9. 指定SAML消息设置,然后单击“ 下一步”
    图20.指定SAML消息设置
    指定SAML消息设置。
  10. 指定SAML声明设置,然后单击“ 下一步”
    图21.指定SAML断言设置
    指定SAML断言设置。
  11. 选择“ 使用XSL和JavaScript进行身份映射”,然后单击“ 下一步”
    图22.指定XSL和JavaScript
    使用XSL和JavaScript。
  12. 选择一个示例身份映射规则(但请注意, 合作伙伴设置规则将覆盖此规则)。 单击下一步
    图23.选择一个身份映射规则
    选择一个示例身份映射规则。
  13. 查看摘要,然后单击完成
    图24.审查摘要
    查看摘要。
  14. 单击“ 下载Tivoli Access Manager配置工具” ,它将配置联系点服务器。 然后单击“完成”
    图25。
    下载Tivoli Access Manager配置工具。
  15. 请确保联盟已成功创建,并在“ 联盟”页面上列出。
    图26.列出新联盟
    列出了新的联盟。
  16. 导出联盟信息并与您的联盟伙伴(在本例中为Salesforce.com)共享。
    图27.导出联盟信息
    将联盟信息导出到Salesforce.com。

步骤2.配置服务提供商

要设置标准的SAML 2.0联盟,您将需要在身份提供者和服务提供者之间交换元数据文件。 我们从Salesforce.com的元数据文件开始,我们将对其进行修改以创建第二个联合伙伴。

图28. Salesforce.com元数据文件
来自Salesforce.com的原始元数据文件。

在文本编辑器中打开图28中的原始元数据文件,并如图29所示对其进行修改以支持其他ACS URL:

图29.修改后的XML元数据文件
修改后的元数据文件。

注意,在图29中,我们已更改实体ID以在Tivoli Federated Identity Manager中唯一标识联合伙伴。 我们还在AssertionConsumerService字段中指定了备用ACS URL。

步骤3.准备身份映射规则

接下来,我们将为两个合作伙伴配置身份映射规则。

清单4显示了将与原始元数据文件一起使用的身份映射规则。 该元数据文件只是将其他SAML属性sfloginid到SAML消息中。

清单4.原始元数据的身份映射规则
importPackage(Packages.com.tivoli.am.fim.trustserver.sts);
importPackage(Packages.com.tivoli.am.fim.trustserver.sts.uuser);

var authnMethodAttr = new Attribute("AuthnContextClassRef","urn:oasis:names:tc:SAML:2.0:assertion",
"urn:oasis:names:tc:SAML:2.0:ac:classes:Password");
var attributeContainer = stsuu.getAttributeContainer();

var wsfloginid = attributeContain-er.getAttributeValueByName("tagvalue_credattrs_name");
var sflognid = new Attribute("sfloginid", "urn:ibm:names:ITFIM:5.1:accessmanager", ""+wsfloginid);
var principalAttr = new Attribute("name", "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
""+wsfloginid);

stsuu.clear();
stsuu.clearAttributeList();
stsuu.addPrincipalAttribute(principalAttr);
stsuu.addAttribute(authnMethodAttr);
stsuu.addAttribute(sflognid);

清单5中的标识映射规则用指定的一个( https://saml.salesforce.com )覆盖了原始元数据配置( https://saml.salesforce.com_communities )中的AudienceRestriction URL。

清单5.修改后的元数据的身份映射规则
importPackage(Packages.com.tivoli.am.fim.trustserver.sts);
importPackage(Packages.com.tivoli.am.fim.trustserver.sts.uuser);

var authnMethodAttr = new Attrib-ute("AuthnContextClassRef","urn:oasis:names:tc:SAML:2.0:assertion",
"urn:oasis:names:tc:SAML:2.0:ac:classes:Password");
var attributeContainer = stsuu.getAttributeContainer();

var sfar = java.lang.reflect.Array.newInstance(java.lang.String, 1);
sfar[0] = "https://saml.salesforce.com";
var AudienceRestriction = new Attribute("AudienceRestriction", null, sfar);
var wsfloginid = attributeContainer.getAttributeValueByName("tagvalue_credattrs_name");
var sflognid = new Attribute("sfloginid", "urn:ibm:names:ITFIM:5.1:accessmanager", ""+wsfloginid);
var principalAttr = new Attribute("name", "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
""+wsfloginid);

stsuu.clear();
stsuu.addAttribute(AudienceRestriction);
stsuu.addPrincipalAttribute(principalAttr);
stsuu.addAttribute(authnMethodAttr);
stsuu.addAttribute(sflognid);

之后,您的身份映射规则准备,导入合作伙伴配置文件和证明上节中的相应身份的映射规则身份映射规则 。 图30显示了Tivoli Federated Identity Manager中的配置。

图30. Tivoli Federated Identity Manager设置和配置
单一登录联盟伙伴配置的屏幕截图。

使用此配置,正确制定的​​SAML消息将发送到不同的ACS URL,所有URL都具有相同的实体ID(如Salesforce.com所规定)。 此配置为访问Salesforce.com的员工门户和Chatter服务的员工和供应商启用了单点登录。

结论

在本文中,您学习了如何使用Tivoli Federated Identity Manager的身份映射规则来定制SAML 2.0断言,以满足服务提供商的独特要求。 在我们的示例Salesforce.com案例研究中,我们演示了如何与两个合作伙伴建立一个联合,并逐步完成了配置和将联合加载到服务器的必要步骤。 生成的系统为每个联盟伙伴生成一个SAML声明,满足Salesforce.com的身份验证要求,同时为企业系统用户启用单点登录身份验证和授权。


翻译自: https://www.ibm.com/developerworks/security/library/se-customsaml/index.html

ibm tivoli

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值