Liberty 中配置 OpenID Connect 客户机

可配置 Liberty 服务器以充当 OpenID Connect 客户机或依赖方,以使用 Web 单点登录并将 OpenID Connect 提供者用作身份提供者。

关于此任务

通过在 Liberty 中启用 openidConnectClient-1.0 功能部件以及输入其他配置信息,可配置 Liberty 服务器以充当 OpenID Connect 客户机。

注: 要配置客户机以直接接受 JWT 令牌,请参阅为 OpenID Connect 配置 JSON Web 令牌认证

过程

  1. openidConnectClient-1.0 Liberty 功能部件及任何其他所需功能部件添加至 server.xml 文件。对于 openidConnectClient-1.0 功能部件,还需要 ssl-1.0 功能部件。在 server.xml 文件的 featureManager 元素内添加以下元素声明:
    <feature>openidConnectClient-1.0</feature> 	
    <feature>ssl-1.0</feature>
  2. 配置 openidConnectClient 元素。以下是使用缺省 Liberty 服务器 OpenID Connect 提供者的最低配置的示例。

    对于该客户机,在给定 URL 模式中必须具有已配置的应用程序,以便能够处理来自 OpenID Connect 提供者的重定向请求。此 URL 还必须与客户机向 OP 注册的重定向 URL 精确匹配。

    避免故障: 如果要使用出站代理,请注意 OpenID Connect RP 未提供通过代理主机自动路由请求的方法。

    如果必须使用代理来访问 OpenID Connect 提供者 (OP),那么您对与任何 OP 相关的 URL 属性输入的值必须包含代理主机和端口,而不是外部 OP 主机和端口。

    在大部分情况下,可将 OP 主机和端口替换为代理主机和端口。您输入的 URL 必须对 RP 和客户端(浏览器或应用程序)可视。有关如何确定要使用的正确 URL 的进一步指南,请联系代理管理员。

    在此示例中,客户机期望 SSL 端口设置为 443。

    <openidConnectClient id="client01" 		
        clientId="client01" 		
        clientSecret="{xor}LDo8LTor" 		
        authorizationEndpointUrl="https://server.example.com:443/oidc/endpoint/OidcConfigSample/authorize" 		
        tokenEndpointUrl="https://server.example.com:443/oidc/endpoint/OidcConfigSample/token"> 	
    </openidConnectClient>
    在此最低配置样本中,采用以下缺省值:
    • scope=openid profile:范围 openid 是必需的,您可使用 scope 属性以编辑必需范围。例如,可将必需 scope 更改为 openid profile email
    • 此 RP 向 OP 将其重定向 URL 注册为 https://<host name>:<ssl port>/oidcclient/redirect/client01,其中 host name 和 ssl port 是自动解析的,client01openidConnectClient 配置元素的标识。如果 RP 前端有代理,那么您可使用属性 redirectToRPHostAndPort 覆盖主机名和端口,并将 redirectToRPHostAndPort 设置为 https://<host name>:<ssl port>
  3. 配置用户注册表。缺省情况下,OP 返回的用户身份不会映射至注册表用户,所以不需要在注册表中配置用户。但是,如果 openidConnectClient 元素的 mapIdentityToRegistryUser 属性设置为 true,那么从 OP 返回的相应身份必须有对应的用户条目,认证和授权才能成功。有关配置用户注册表的更多信息,请参阅在 Liberty 中配置用户注册表
  4. 配置服务器的信任库以包含受支持的 OpenID Connect 提供者的签署者证书。有关密钥库的更多信息,请参阅在 Liberty 中启用 SSL 通信
  5. 修改服务器的 SSL 配置以使用所配置信任库。
    <sslDefault sslRef="DefaultSSLSettings" /> 
    <ssl id="DefaultSSLSettings" keyStoreRef="myKeyStore" trustStoreRef="myTrustStore" /> 	
    <keyStore id="myKeyStore" password="{xor}EzY9Oi0rJg==" type="jks" location="${server.config.dir}/resources/security/BasicKeyStore.jks" /> 	
    <keyStore id="myTrustStore" password="{xor}EzY9Oi0rJg==" type="jks" location="${server.config.dir}/resources/security/BasicTrustStore.jks" />

    OpenID Connect 配置为使用服务器指定的缺省 SSL 配置。因此,服务器的缺省 SSL 配置必须使用为 OpenID Connect 配置的信任库。

    [17.0.0.3 and later]除了使用示例中显示的 SSL 缺省配置之外,还可以使用 outboundSSLRef 属性在 sslDefault 元素上配置出站缺省 SSL 配置。如果指定了出站缺省属性,那么 outboundSSLRef 属性所指定的 SSL 配置将用于出站连接。您可以通过在 SSL 配置中使用出站 SSL 过滤器来覆盖缺省值并指定要用于出站连接的主机和端口。有关更多信息,请参阅SSL 配置的出站过滤器配置用于出站通信的 SSL 设置

  6. 可选:配置第三方 OpenID Connect 提供者。

    要配置 Liberty OpenID Connect 客户机以使用第三方 OpenID Connect 提供者(例如,Microsoft Azure 或 Google),必须配置以下属性。可通过调用 OP 的发现端点获取属性值,此端点在通过将字符串 /.well-known/openid-configuration 连接至发出者形成的路径上提供 JSON 文档。

    1. jwkEndpointUrl 属性设置为 OP 的 JSON Web 密钥集 JWK 文档的 URL,此 URL 在发现文件中定义为 jwks_uri。例如,要使用 Google 的 OP,您可设置 jwkEndpointUrl = "https://www.googleapis.com/oauth2/v2/certs"
    2. issuerIdentifier 属性设置为发现文件中定义的 issuer。未包含此值作为 iss 声明的标识令牌会被拒绝。例如,如果您将 Google 用作 OP,那么可设置 issuerIdentifier="accounts.google.com"
    3. 设置 signatureAlgorithm="RS256"Liberty OpenID Connect 客户机的缺省签名算法为 HS256。
    4. userIdentityToCreateSubject 属性设置为表示用户唯一标识的供应商标识令牌使用的声明名称。例如,如果您使用 Google 的 OP,那么您可设置 userIdentityToCreateSubject ="email",如果您使用 Microsoft Azure,那么您可设置 userIdentityToCreateSubject ="upn"userIdentityToCreateSubject ="unique_name"
    5. groupIdentifier 属性设置为表示用户组成员资格或角色的声明名称。例如,如果您使用 Microsoft Azure,那么可设置 groupIdentifier="groups"

    有关更多 OpenID Connect 客户机配置选项,请参阅 OpenID Connect 客户机

  7. 可选:认证过滤器。

    如果已启用 openidConnectClient-1.0 功能部件并且未对 openidConnectClient 元素配置 authFilterRef 属性,那么系统通过 OpenID Connect 提供者认证任何未认证的请求。

    有关配置认证过滤器的更多信息,请参阅认证过滤器

  8. 支持多个 OpenID Connect 提供者。

    通过创建多个 openidConnectClient 元素和多个认证过滤器,可将 Liberty 配置为多个 OpenID Connect 提供者的 OpenID Connect 依赖方。每个 openidConnectClient 元素定义与一个 OpenID Connect 提供者的单点登录关系,并使用 authFilterRef 属性引用一个认证过滤器。

  9. 配置受支持的标识令牌签名算法。

    可配置 Liberty OpenID Connect 客户机以在标识令牌中支持 RS256 签名算法。Liberty OpenID Connect 客户机的缺省签名算法为 HS256。如果通过设置 signatureAlgorithm="RS256" 将 RS256 配置为标识令牌的签名算法,那么必须配置 trustStoreReftrustAliasName,除非 OP 支持 JWK 端点。

  10. 可选:配置“隐式”授权类型。

    openidConnectClient-1.0 功能部件使用“授权代码”授权类型以请求用户认证令牌,您可配置 Liberty openidConnectClient-1.0 功能部件以通过将 grantType="implicit" 添加至 server.xml 文件以使用“隐式”授权类型。如果 Liberty 服务器和 OpenID Connect 提供者在不同防火墙中,那么必须使用此配置选项。

  11. 可选:在处理标识令牌后,Liberty OpenID Connect 依赖方会自动创建单点登录 (SSO) 令牌。您可以通过添加配置属性 disableLtpaCookie="true"Liberty 配置为不创建用于服务器的 SSO 令牌,或用于通过 OpenID Connect 进行保护的资源的 SSO 令牌。如果设置 disableLtpaCookie="true",那么 Liberty OpenID Connect 客户机将仅接受先前已向所配置的 OpenID Connect 提供者进行认证的认证请求,并且认证会话生存期将限制为标识令牌的生存期。
  12. 可选:可以将 OpenID Connect 客户机配置为选择性地接受有效的 OAuth 2.0 不记名访问令牌作为认证令牌,而不将请求重定向到 OpenID Connect 提供者。如果请求包含有效的 OAuth 2.0 不记名访问令牌,那么 Liberty OpenID Connect 客户机将自动验证该访问令牌,并根据令牌验证结果创建已经过认证的主体集。如果请求不包含访问令牌或者访问令牌无效,那么 Liberty OpenID Connect 客户机会继续将用户重定向到 OpenID Connect 提供者。此功能允许 Liberty 服务器为浏览器客户机和非浏览器客户机(例如 RESTful 客户机)提供服务。可以向配置添加 inboundPropagation="supported" 以启用此功能。
  13. [16.0.0.4 and later]如果托管环境不允许访问 /oidcclient 上下文根,请通过配置 oidcClientWebapp 元素修改上下文根。

    缺省情况下,Liberty OpenID Connect 客户机的重定向 servlet 侦听 /oidcclient 上下文根,且其重定向 URL 格式为 https://<host_name>:<ssl_port>/oidcclient/redirect/<configuration_ID>。 如果无法使用此上下文根,请在服务器配置中设置其他上下文根。

    例如,如果托管环境要求您使用 /acme/openid 上下文根,请添加以下元素:
    <oidcClientWebapp contextPath="/acme/openid" />

    生成的重定向 URL 格式为 https://<host_name>:<ssl_port>/acme/openid/redirect/<configuration_ID>

结果

您现在已设置将 Liberty 服务器配置为能够与配置为 OpenID Connect 提供者的其他 Liberty 服务器通信的 OpenID Connect 客户机时所需的最低配置。

用于指示主题类型的图标 任务主题

文件名:twlp_config_oidc_rp.html