Oracle OpenSSO Update 2 发行说明

第 4 章 使用 Oracle OpenSSO Fedlet

本部分提供关于 Oracle OpenSSO Fedlet 的以下信息:

关于 Oracle OpenSSO Fedlet

Oracle OpenSSO Fedlet 是轻量级服务提供者 (Service Provider, SP) 实现,可随 Java 或 .NET 服务提供者应用程序一起部署,使该应用程序可以使用 SAMLv2 协议与 Oracle OpenSSO 8.0 Update 2 等身份认证提供者 (Identity Provider, IDP) 进行通信。Fedlet 具有两个版本,具体取决于您的平台:

在 Oracle OpenSSO 8.0 Update 2 中,Fedlet 可按如下方式获取:

Oracle OpenSSO Fedlet 的要求

Fedlet 具有以下要求:

Oracle OpenSSO Fedlet 配置

本部分说明如何使用服务提供者应用程序对 Fedlet 进行初始配置:

完成对 Fedlet 的初始配置后,请继续进行您要执行的任何其他配置。需要注意以下事项:

Procedure配置 Java Fedlet

  1. 在身份认证提供者端,生成身份认证提供者的 XML(可扩展标记语言)元数据,并将该元数据保存在一个名为 idp.xml 的文件中。

    对于 Oracle OpenSSO 8.0 Update 2,请使用 exportmetadata.jsp。例如:

    http://opensso-idp.example.com:8080/opensso/saml2/jsp/exportmetadata.jsp
  2. 在服务提供者端,解压缩 Fedlet ZIP 文件(如有必要)。

  3. 创建 Fedlet 主目录,这是 Fedlet 读取其元数据、信任环和配置属性文件的目录。

    默认位置是运行 Fedlet Web 容器的用户的主目录(由 user.home JVM 属性表示)下的 Fedlet 子目录。例如,如果此主目录为 /home/webservd,则 Fedlet 主目录为:

    /home/webservd/fedlet

    要更改默认的 Fedlet 主目录,请将 JVM 运行时 com.sun.identity.fedlet.home 属性的值设置为所需的位置。例如:

    -Dcom.sun.identity.fedlet.home=/export/fedlet/conf

    Fedlet 之后将从 /export/fedlet/conf 目录读取其元数据、信任环和配置文件。

  4. 将以下文件从 Java Fedlet java/conf 目录复制到 Fedlet 主目录:

    • sp.xml-template

    • sp-extended.xml-template

    • idp-extended.xml-template

    • fedlet.cot-template

  5. 在 Fedlet 主目录中,重命名所复制的文件并将 -template 从每个名称中删除。

  6. 在复制到 Fedlet 主目录并进行重命名的文件中,替换下表中显示的标记:

    标记 

    替换为 

    FEDLET_COT

    远程身份认证提供者和 Java Fedlet 服务提供者应用程序所属的信任环 (Circle Of Trust, COT) 的名称。 

    FEDLET_ENTITY_ID

    Java Fedlet 服务提供者应用程序的 ID(名称)。例如:fedletsp

    FEDLET_PROTOCOL

    Java Fedlet 服务提供者应用程序(如 fedlet.war)的 Web 容器的协议。例如:https

    FEDLET_HOST

    Java Fedlet 服务提供者应用程序(如 fedlet.war)的 Web 容器的主机名。例如:fedlet-host.example.com

    FEDLET_PORT

    Java Fedlet 服务提供者应用程序(如 fedlet.war)的 Web 容器的端口号。例如:80

    FEDLET_DEPLOY_URI

    Java Fedlet 服务提供者应用程序的 URL。例如: http://fedletsp.example.com/myFedletApp

    IDP_ENTITY_ID

    远程身份认证提供者的 ID(名称)。例如:openssoidp

    注意:如果 Fedlet 服务提供者或身份认证提供者实体 ID 包含百分号 (%) 或逗号 (,),则必须先对该字符进行转义,然后才能在 fedlet.cot 文件中对其进行替换。例如,将 "%" 更改为 "%25",将 "," 更改为 "%2C"。

  7. FedletConfiguration.properties 文件从 Java Fedlet java/conf 目录复制到 Fedlet 主目录。

  8. 将身份认证提供者标准元数据 XML(可扩展标记语言)文件(通过步骤 1 获得)复制到 Fedlet 主目录。此文件必须命名为 idp.xml

  9. 将 Java Fedlet XML(可扩展标记语言)元数据文件 (sp.xml) 导入到身份认证提供者中。

    对于 Oracle OpenSSO 8.0 Update 2,请在 OpenSSO 8.0 管理控制台中,使用“常见任务”下的“注册远程服务提供者”工作流导入 Java Fedlet 服务提供者元数据,并将 Java Fedlet 服务提供者添加到信任环中。

接下来的操作

根据您的要求,对 Java Fedlet 继续进行任何其他配置。

Procedure配置 .NET Fedlet

  1. 在身份认证提供者端,生成身份认证提供者的 XML(可扩展标记语言)元数据,并将该元数据保存在一个名为 idp.xml 的文件中。

    对于 Oracle OpenSSO 8.0 Update 2,请使用 exportmetadata.jsp。例如:

    http://opensso-idp.example.com:8080/opensso/saml2/jsp/exportmetadata.jsp
  2. 在服务提供者端,解压缩 Fedlet ZIP 文件(如有必要)。

  3. 将以下文件从 .NET Fedlet asp.net/conf 文件夹复制到您的应用程序的 App_Data 文件夹:

    • sp.xml-template

    • sp-extended.xml-template

    • idp-extended.xml-template

    • fedlet.cot-template

  4. App_Data 文件夹中,重命名所复制的文件并将 -template 从每个名称中删除。

  5. 在复制到 App_Data 文件夹并进行重命名的文件中,替换下表中显示的标记:

    标记 

    替换为 

    FEDLET_COT

    远程身份认证提供者和 .NET Fedlet 服务提供者应用程序所属的信任环 (Circle Of Trust, COT) 的名称。 

    FEDLET_ENTITY_ID

    .NET Fedlet 服务提供者应用程序的 ID(名称)。例如:fedletsp

    FEDLET_DEPLOY_URI

    .NET Fedlet 服务提供者应用程序的 URL。例如: http://fedletsp.example.com/myFedletApp

    IDP_ENTITY_ID

    远程身份认证提供者的 ID(名称)。例如:openssoidp

  6. 将身份认证提供者标准元数据 XML(可扩展标记语言)文件(通过步骤 1 获得)复制到您的应用程序的 App_Data 文件夹中。此文件必须命名为 idp.xml

  7. Fedlet.dllFedlet.dll.config 文件从 .NET Fedlet asp.net/bin 文件夹复制到应用程序的 bin 文件夹中。

  8. 将 .NET Fedlet XML(可扩展标记语言)元数据文件 (sp.xml) 导入到身份认证提供者中。

    对于 Oracle OpenSSO 8.0 Update 2,请在 OpenSSO 8.0 管理控制台中,使用“常见任务”下的“注册远程服务提供者”工作流导入 .NET Fedlet 服务提供者元数据,并将 .NET Fedlet 服务提供者添加到信任环中。

接下来的操作

根据您的要求,对 .NET Fedlet 继续进行任何其他配置。

OpenSSO 8.0 Update 2 中 Fedlet 的新功能

Oracle OpenSSO 8.0 Update 2 提供了有关 Fedlet 的以下新功能:

Fedlet 版本信息 (CR 6941387)

Oracle OpenSSO Fedlet 包含版本信息。解压缩 Fedlet 软件包(ZIP 文件)中的文件后,通过查看以下文件之一可以确定 Fedlet 的版本:

Java Fedlet 密码加密和解密 (CR 6930477)

Java Fedlet 在 fedlet.war 文件中提供了 fedletEncode.jsp,以对 storepass keypass 密码进行加密。默认情况下,将为每个 Fedlet 生成不同的加密密钥。要更改此加密密钥,请设置 Fedlet FederationConfig.properties 文件中的 am.encryption.pwd 属性。

Java Fedlet 支持签名和加密

Java Fedlet 支持 XML(可扩展标记语言)签名验证和已加密 assertionNameID 元素及其相应属性的解密。

Procedure配置 Java Fedlet 以支持签名和加密

  1. 使用 keytool 实用程序创建名为 keystore.jks 的密钥库文件。

  2. 将用于签名的私钥(和公共证书,如果适用)和用于加密的私钥(和公共证书,如果适用)添加到 keystore.jks 文件中。

  3. 创建 .storepass 文件。

  4. 将密码添加到 .storepass 文件中。要对密码加密,请使用 fedletEncode.jsp

  5. 创建 .keypass 文件。

  6. 将密码添加到 .keypass 文件中。要对密码加密,请使用 fedletEncode.jsp

  7. 如果使用的是明文密码,请注释掉 FederationConfig.properties 文件中的以下行:

    com.sun.identity.saml.xmlsig.passwordDecoder=
        com.sun.identity.fedlet.FedletEncodeDecode
  8. FederationConfig.properties 文件中设置以下属性的完整路径,其中 path 是相应文件的完整路径:

    com.sun.identity.saml.xmlsig.keystore=path/keystore.jks
    com.sun.identity.saml.xmlsig.storepass=path/.storepass
    com.sun.identity.saml.xmlsig.keypass=path/.keypass
  9. 使用 keytool 导出签名证书。例如:

    keytool -export -keystore keystore.jks -rfc -alias test

    此工具会提示您输入用于访问 keystore.jks 的密码,然后生成证书。

  10. 如果需要加密证书,请使用 keytool 导出证书,如上一步骤所示。(也可以将同一证书用于签名和加密。)

  11. 创建 KeyDescriptor XML(可扩展标记语言)块,然后将签名证书添加到该块中。示例如下,请注意 KeyDescriptor 元素的 use="signing" 标记:

    <KeyDescriptor use="signing">
          <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:X509Data>
              <ds:X509Certificate>
    MIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
    bGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w
    ZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw
    CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK
    BgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B
    AQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of\+
    RkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY
    Js0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U
    QzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA
    cGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC
    /FfwWigmrW0Y0Q==
              </ds:X509Certificate>
            </ds:X509Data>
          </ds:KeyInfo>
    </KeyDescriptor>
  12. 创建另一个 KeyDescriptor XML(可扩展标记语言)块,然后将加密证书添加到该块中。示例如下,请注意 KeyDescriptor 元素的 use="encryption" 标记:

    <KeyDescriptor use="encryption">
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <X509Data>
              <X509Certificate>
    MIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
    bGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w
    ZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw
    CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK
    BgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B
    AQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of\+
    RkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY
    Js0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U
    QzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA
    cGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC
    /FfwWigmrW0Y0Q==
              </X509Certificate>
            </X509Data>
          </KeyInfo>
    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc">
      <KeySize xmlns="http://www.w3.org/2001/04/xmlenc#">128</KeySize>
    </EncryptionMethod>
    </KeyDescriptor>
  13. 在 Java Fedlet sp.xml 文件中,将包含有签名和加密证书的 XML(可扩展标记语言)块添加在 SPSSODescriptor 元素的下面。如需样例 SPSSODescriptor 元素,请参见示例 4–1

    AuthnRequestsSigned 属性设置为 true,以将 Java Fedlet 配置为对所有验证请求签名。

  14. 在 Java Fedlet sp-extended.xml 文件中,设置以下元素的值:

    • signingCertAlias 包含密钥库中 XML(可扩展标记语言)签名证书的别名。

    • encryptionCertAlias 包含密钥库中 XML(可扩展标记语言)加密证书的别名。

  15. 要实施 Java Fedlet 服务提供者加密的内容,请在 sp-extended.xml 文件中将以下属性设置为 true

    • wantAssertionEncrypted

    • wantNameIDEncrypted

    • wantAttributeEncrypted

  16. 要实施 Java Fedlet 服务提供者签名的内容和计划签名的内容,请将以下属性设置为 true

    • idp.xml 文件中的 wantAuthnRequestsSigned,告知 Fedlet 要签名的内容。

    • sp.xml 文件中的 AuthnRequestsSignedWantAssertionsSigned,告知身份认证提供者 Fedlet 计划要签名的内容。

    • sp-extended.xml 文件中的 wantArtifactResponseSigned,告知 Fedlet 要签名的内容。

    • sp-extended.xml 文件中的 wantPOSTResponseSigned

    • sp-extended.xml 文件中的 wantLogoutRequestSigned

    • sp-extended.xml 文件中的 wantLogoutResponseSigned

    如果身份认证提供者需要对特定消息进行签名,请将 idp-extended.xml 文件中的相应属性设置为 true。例如,wantLogoutRequestSignedwantLogoutResponseSigned


    注 –

    如果在 sp-extended.xml 文件中设置了属性,请将此信息告知身份认证提供者管理员,以便可以在身份认证提供者中进行必要的配置更改。


  17. 重新启动 Java Fedlet Web 容器。

  18. 将 Java Fedlet sp.xml 文件导入到身份认证提供者中。


示例 4–1 Java Fedlet 样例 SPSSODescriptor 元素

<EntityDescriptor entityID="fedlet"
xmlns="urn:oasis:names:tc:SAML:2.0:metadata">

<SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="false"
protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<b><KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>
MIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w
ZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK
BgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B
AQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of\+
RkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY
Js0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U
QzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA
cGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC
/FfwWigmrW0Y0Q==
          </ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>

</KeyDescriptor></b>
<b><KeyDescriptor use="encryption">
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <X509Data>
          <X509Certificate>
MIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w
ZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK
BgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B
AQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of\+
RkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY
Js0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U
QzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA
cGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC
/FfwWigmrW0Y0Q==
          </X509Certificate>
        </X509Data>
      </KeyInfo>

<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc">
<KeySize xmlns="http://www.w3.org/2001/04/xmlenc#">128</KeySize>
</EncryptionMethod>
</KeyDescriptor></b>
<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat
><AssertionConsumerService index="1"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="http://server.sun.com:7070/fedlet/fedletapplication"/>
</SPSSODescriptor>
</EntityDescriptor>

Java Fedlet 支持属性查询 (CR 6930476)

Java Fedlet 支持 SAMLv2 属性查询,以针对特定的身份属性值查询诸如 Oracle OpenSSO 8.0 Update 2 等身份认证提供者。可以将 Fedlet 配置为对查询进行签名和加密。发出 Fedlet 查询必须要进行签名,但加密是可选操作。

Procedure配置 Java Fedlet 以支持属性查询

  1. 启用 XML(可扩展标记语言)签名以对属性查询进行签名,如Java Fedlet 支持签名和加密中所述。

  2. 将前面步骤中生成的证书添加到 Fedlet sp.xml 文件的 RoleDescriptor 元素中。在以下示例中,有两个要在其中粘贴证书的 KeyDescriptor 标记。一个用于签名,另一个用于加密。如果未启用加密,则不需要 KeyDescriptor use="encryption" 标记。

    <RoleDescriptor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:query="urn:oasis:names:tc:SAML:metadata:ext:query"
          xsi:type="query:AttributeQueryDescriptorType"
          protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
      <KeyDescriptor use="signing">
          <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:X509Data>
              <ds:X509Certificate>
                --certificate--
              </ds:X509Certificate>
            </ds:X509Data>
          </ds:KeyInfo>
      </KeyDescriptor>
      <KeyDescriptor use="encryption">
          <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:X509Data>
              <ds:X509Certificate>
                --certificate--
              </ds:X509Certificate>
            </ds:X509Data>
          </ds:KeyInfo>
        <EncryptionMethod
    Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc">
    <xenc:KeySize
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">128</xenc:KeySize>
        </EncryptionMethod>
      </KeyDescriptor>
    </RoleDescriptor>
  3. 在 Java Fedlet sp-extended.xml 文件中,指定 signingCertAlias 属性的值,并指定 encryptionCertAlias 属性(如果已配置)的值。

    如果计划将身份认证提供者配置为对声明进行加密,也请对 NameID 元素加密。因此,wantNameIDEncrypted 属性的值必须设置为 true。将 XML(可扩展标记语言)代码添加到 AttributeQueryConfig 元素中。例如:

    <Attribute name="signingCertAlias">
          <Value>test</Value>
    </Attribute>
    <Attribute name="encryptionCertAlias">
          <Value>test</Value>
    </Attribute>
    <Attribute name="wantNameIDEncrypted">
          <Value>true</Value>
    </Attribute>

    在此示例中,test 是样例密钥的别名。

  4. 将 Java Fedlet 元数据文件 (sp.xml) 导入到身份认证提供者中。

    此外,在身份认证提供者中执行其他配置步骤以支持 Fedlet 属性查询。

请求和响应的 .NET Fedlet 加密和解密 (CR 6939005)

.NET Fedlet 可以对外出的 XML(可扩展标记语言)请求进行加密,对接收的针对 NameID、Attribute 和 Assertion 元素的响应进行解密。

Procedure配置 .NET Fedlet 以支持对请求和响应进行加密和解密

  1. 使用 Microsoft Management Console 的证书管理单元将 X.509 证书导入到本地计算机帐户内的个人文件夹中。要使用此管理单元,请参见以下 Microsoft 文章:

    http://msdn.microsoft.com/en-us/library/ms788967.aspx

  2. 通过查看“属性”对话框并输入值,为此证书指定一个易记名称。(保存此值以在步骤 4 中使用。)

  3. 为 Internet Information Server (IIS) 使用的用户帐户设置相应的权限,以允许其读取证书,如 Microsoft 文章中所述。例如:

    1. 在“证书管理单元”中,浏览到“操作”->“所有任务”,然后浏览到“管理私钥”。

    2. 为运行 IIS 的用户帐户(通常为 NETWORK SERVICE)指定允许读取权限。

  4. 在 .NET Fedlet 的扩展元数据文件 (sp-extended.xml) 中,指定在步骤 2 中指定的易记名称,作为 encryptionCertAlias 属性的值。例如:

    <Attribute name="encryptionCertAlias">
    <Value>MyFedlet</Value>
  5. 在 .NET Fedlet 的服务提供者元数据文件 (sp.xml) 中,添加加密密钥的 KeyDescriptor

    使用之前使用过的 Microsoft Management Console 证书管理单元导出以 Base64 编码形式包括在 KeyDescriptor XML(可扩展标记语言)块中的证书的公钥。此 KeyDescriptor 必须是 SPSSODescriptor 中的第一个子元素。例如:

    <KeyDescriptor use="encryption">
               <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                 <ds:X509Data>
                   <ds:X509Certificate>
    MIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
    bGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w
    ZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw
    CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK
    BgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B
    AQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of\+
    RkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY
    Js0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U
    QzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA
    cGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC
    /FfwWigmrW0Y0Q==
                   </ds:X509Certificate>
                 </ds:X509Data>
               </ds:KeyInfo>
               <EncryptionMethod
    Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc">
               <KeySize
    xmlns="http://www.w3.org/2001/04/xmlenc#">128</KeySize>
               </EncryptionMethod>
    </KeyDescriptor>
  6. 重新启动与 .NET 应用程序关联的应用程序池。

接下来的操作

要测试此配置,请使用样例应用程序。此外,设置以下属性以加密请求和解密来自包含所配置元数据的适当更改的身份认证提供者的响应:

请求和响应的 .NET Fedlet 签名 (CR 6928530)

.NET Fedlet 支持对外出 XML(可扩展标记语言)请求(如 Authn 请求)和注销请求签名。

Procedure配置 .NET Fedlet 以支持对请求和响应进行签名:

  1. 使用 Microsoft Management Console 的证书管理单元将 X.509 证书导入到本地计算机帐户内的个人文件夹中。要使用此管理单元,请参见以下 Microsoft 文章:

    http://msdn.microsoft.com/en-us/library/ms788967.aspx

  2. 通过查看“属性”对话框并输入值,为此证书指定一个易记名称。(保存此值以在步骤 4 中使用。)

  3. 为 Internet Information Server (IIS) 使用的用户帐户设置相应的权限,以允许其读取证书,如 Microsoft 文章中所述。例如:

    1. 在“证书管理单元”中,浏览到“操作”->“所有任务”,然后浏览到“管理私钥”。

    2. 为运行 IIS 的用户帐户(通常为 NETWORK SERVICE)指定允许读取权限。

  4. 在 .NET Fedlet 的扩展元数据文件 (sp-extended.xml) 中,指定在步骤 2 中指定的易记名称,作为 signingCertAlias 属性的值。例如:

    <Attribute name="signingCertAlias">
    <Value>MyFedlet</Value>
  5. 在 .NET Fedlet 的服务提供者元数据文件 (sp.xml) 中,添加签名密钥的 KeyDescriptor

    使用之前使用过的 Microsoft Management Console 证书管理单元导出以 Base64 编码形式包括在 KeyDescriptor XML(可扩展标记语言)块中的证书的公钥。此 KeyDescriptor 必须是 SPSSODescriptor 中的第一个子元素。例如:

    <KeyDescriptor use="signing">
                 <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                    <ds:X509Data>
                       <ds:X509Certificate>
    MIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
    bGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w
    ZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw
    CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK
    BgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B
    AQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of\+
    RkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY
    Js0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U
    QzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA
    cGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC
    /FfwWigmrW0Y0Q==
                       </ds:X509Certificate>
                    </ds:X509Data>
                 </ds:KeyInfo>
    </KeyDescriptor>
  6. 重新启动与 .NET 应用程序关联的应用程序池。

.NET Fedlet 单点注销(CR 6928528 和 CR 6930472)

.NET Fedlet 支持身份认证提供者启动的单点注销和服务提供者启动的单点注销。要实现单点注销,.NET Fedlet 样例应用程序应将 logout.aspxspinitiatedslo.aspx 文件包含在 asp.net/SampleApp 文件夹中。要了解 Fedlet 单点注销功能如何工作,请部署 .NET Fedlet 样例应用程序。

Procedure配置 .NET Fedlet 服务提供者应用程序以支持单点注销:

  1. 如果未配置 .NET Fedlet,请执行 Readme 文件中的步骤。

  2. logout.aspxspinitiatedslo.aspx 文件复制到 .NET 应用程序的公共内容中。

  3. 对您应用程序的配置文件进行以下更改:

    • sp.xml 文件中,确保 logout.aspx 文件的路径指向您应用程序的该文件的正确位置。

    • idp.xml 文件中(或在进行身份认证提供者配置期间),确保 spinitiatedslo.aspx 文件的路径指向您应用程序的该文件的正确位置。

  4. 如果要对注销请求和注销响应进行签名,请将 sp-extended.xmlidp-extended.xml 文件中的以下属性设置为 true

    • wantLogoutRequestSigned

    • wantLogoutResponseSigned

  5. 将 Fedlet 服务提供者元数据文件 (sp.xml) 导入到身份认证提供者中。

    此外,通知身份认证提供者管理员您已经为 Fedlet 服务提供者配置单点注销,以便可以对身份认证提供者配置进行任何所需的其他更改。

.NET Fedlet 服务提供者启动的单点登录 (CR 6928525)

.NET Fedlet 支持 SAMLv2 服务提供者启动的单点登录 (SSO)。此外,还必须支持工件,以允许 .NET Fedlet 接收工件,然后通过 SOAP 使用分发身份认证提供者的工件解析服务进行解析。

.NET Fedlet 样例应用程序表明如何配置单点登录。为应用程序安装必要的工件后,需要提供特定的 URI,以在身份认证提供者成功进行验证后接收包含 SAMLv2 响应的 HTTP POST。以下代码示例表明如何在 .NET 应用程序中检索此信息:


示例 4–2 在 .NET Fedlet 应用程序中检索 AuthnResponse 的代码示例

AuthnResponse authnResponse = null;
try
{
      ServiceProviderUtility spu = new ServiceProviderUtility(Context);
      authnResponse = spu.GetAuthnResponse(Context);
}
catch (Saml2Exception se)
{
      // invalid AuthnResponse received
}
catch (ServiceProviderUtilityException spue)
{
      // issues with deployment (reading metadata)
}

如果应用程序接收 SAMLv2 响应,将用声明信息填充 authnResponse 对象。样例应用程序表明如何从此对象检索属性和主题信息。

.NET Fedlet 支持多个身份认证提供者和搜索服务 (CR 6928524)

.NET Fedlet 支持多个身份认证提供者和身份认证提供者搜索服务。

在某些部署中,您可能想要为 .NET Fedlet 配置多个身份认证提供者(如 Oracle OpenSSO 8.0 Update 2)。对于每个要添加的附加身份认证提供者,请执行以下任务。

Procedure配置 .NET Fedlet 以支持多个身份认证提供者

  1. 获取附加身份认证提供者的 XML(可扩展标记语言)元数据文件。

  2. 将附加身份认证提供者元数据文件命名为 idpn.xml,其中 n 是您添加的身份认证提供者的序列。例如,将第二个身份认证提供者文件命名为 idp2.xml,将第三个身份认证提供者文件命名为 idp3.xml,依此类推。此过程使用 idp2.xml 作为文件名。

  3. 将步骤 2 中的 idp2.xml 文件复制到应用程序的 App_Data 文件夹中。

  4. 将此新身份认证提供者添加到 .NET Fedlet 信任环中。

    将新身份认证提供者添加到现有信任环中:

    在应用程序的 App_Data 文件夹的 fedlet.cot 文件中,使用逗号 (,) 作为分隔符,将新 IDP 实体 ID(由 idp2.xml 元数据文件中的 entityID 属性表示)附加到 sun-fm-trusted-providers 属性的值。

    将新身份认证提供者添加到新信任环中:

    1. 在应用程序的 App_Data 文件夹中,创建一个名为 fedlet2.cot 的新文件。使用现有的 fedlet.cot 作为模板,但将 cot-name 属性的值更改为新信任环的名称(例如 cot2)。同时包含新身份认证提供者实体 ID 和 Fedlet 实体 ID 作为 sun-fm-trusted-providers 属性的值,两个实体 ID 用逗号 (,) 分隔。

    2. sp-extended.xml 文件中,将新信任环的名称添加到 cotlist 属性的值中。例如,对于名为 cot2 的信任环:

      <Attribute name="cotlist">
      <Value>saml2cot</Value>
      <Value>cot2</Value>
      </Attribute>
  5. 在应用程序的 App_Data 文件夹中,创建一个新的 idp2-extended.xml 文件作为新身份认证提供者的扩展元数据。使用现有的 idp-extended.xml 文件作为模板,但将 entityID 更改为新身份认证提供者实体 ID。如果为该身份认证提供者创建了新信任环,则将 cotlist 属性的值更改为该信任环的名称。确保附加身份认证提供者是远程身份。

  6. 重新启动与 .NET Fedlet 应用程序关联的应用程序池。

  7. Fedlet 元数据 XML(可扩展标记语言)文件 (sp.xml) 必须导入到附加身份认证提供者中,并添加到身份认证提供者实体所属的同一信任环中。将 sp.xml 文件导入到身份认证提供者中,或者将该文件提供给身份认证提供者管理员进行导入。

.NET Fedlet 支持身份认证提供者搜索服务 (CR 6928524)

在此方案中,为 .NET Fedlet 配置同属一个信任环中的多个身份认证提供者,而您要将 Fedlet 配置为使用身份认证提供者搜索服务来确定首选的身份认证提供者。

必须为与 .NET Fedlet 配合使用的身份认证提供者配置搜索服务。有关在 Oracle OpenSSO 8.0 Update 2 中配置身份认证提供者搜索服务的信息,请参见以下文档集合:http://docs.sun.com/coll/1767.1

Procedure将 .NET Fedlet 配置为使用身份认证提供者搜索服务:

  1. 在 .NET Fedlet fedlet.cot 文件中,将 sun-fm-saml2-readerservice-url 属性设置为 SAMLv2 读取器服务 URL。例如:

    sun-fm-saml2-readerservice-url=http://discovery.common.com/opensso/saml2reader
  2. 重新启动与 .NET Fedlet 应用程序关联的应用程序池。

Oracle OpenSSO Fedlet 的常见问题和解决方法

待编写

文档勘误表

Fedlet Java API(应用编程接口)参考在 Oracle OpenSSO 8.0 Update 2 Java API(应用编程接口)参考中提供,Oracle OpenSSO 8.0 Update 2 Java API(应用编程接口)参考包含在以下文档集合中:http://docs.sun.com/coll/1767.1


注 –

getPolicyDecisionForFedlet 方法在 OpenSSO 8.0 Update 2 发行版本中不受支持。