在 Liberty 中配置 OpenID Connect 客户机
可配置 Liberty 服务器以充当 OpenID Connect 客户机或依赖方,以使用 Web 单点登录并将 OpenID Connect 提供者用作身份提供者。
关于此任务
通过在 Liberty 中启用 openidConnectClient-1.0 功能部件以及输入其他配置信息,可配置 Liberty 服务器以充当 OpenID Connect 客户机。
过程
- 将 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>
- 配置 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 是自动解析的,client01 是 openidConnectClient 配置元素的标识。如果 RP 前端有代理,那么您可使用属性 redirectToRPHostAndPort 覆盖主机名和端口,并将 redirectToRPHostAndPort 设置为 https://<host name>:<ssl port>。
- 配置用户注册表。缺省情况下,OP 返回的用户身份不会映射至注册表用户,所以不需要在注册表中配置用户。但是,如果 openidConnectClient 元素的 mapIdentityToRegistryUser 属性设置为 true,那么从 OP 返回的相应身份必须有对应的用户条目,认证和授权才能成功。有关配置用户注册表的更多信息,请参阅在 Liberty 中配置用户注册表。
- 配置服务器的信任库以包含受支持的 OpenID Connect 提供者的签署者证书。有关密钥库的更多信息,请参阅在 Liberty 中启用 SSL 通信
- 修改服务器的 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 配置的信任库。
除了使用示例中显示的 SSL 缺省配置之外,还可以使用 outboundSSLRef 属性在 sslDefault 元素上配置出站缺省 SSL 配置。如果指定了出站缺省属性,那么 outboundSSLRef 属性所指定的 SSL 配置将用于出站连接。您可以通过在 SSL 配置中使用出站 SSL 过滤器来覆盖缺省值并指定要用于出站连接的主机和端口。有关更多信息,请参阅SSL 配置的出站过滤器和配置用于出站通信的 SSL 设置。
- 可选:配置第三方 OpenID Connect 提供者。
要配置 Liberty OpenID Connect 客户机以使用第三方 OpenID Connect 提供者(例如,Microsoft Azure 或 Google),必须配置以下属性。可通过调用 OP 的发现端点获取属性值,此端点在通过将字符串 /.well-known/openid-configuration 连接至发出者形成的路径上提供 JSON 文档。
- 将 jwkEndpointUrl 属性设置为 OP 的 JSON Web 密钥集 JWK 文档的 URL,此 URL 在发现文件中定义为 jwks_uri。例如,要使用 Google 的 OP,您可设置 jwkEndpointUrl = "https://www.googleapis.com/oauth2/v2/certs"。
- 将 issuerIdentifier 属性设置为发现文件中定义的 issuer。未包含此值作为 iss 声明的标识令牌会被拒绝。例如,如果您将 Google 用作 OP,那么可设置 issuerIdentifier="accounts.google.com"。
- 设置 signatureAlgorithm="RS256"。Liberty OpenID Connect 客户机的缺省签名算法为 HS256。
- 将 userIdentityToCreateSubject 属性设置为表示用户唯一标识的供应商标识令牌使用的声明名称。例如,如果您使用 Google 的 OP,那么您可设置 userIdentityToCreateSubject ="email",如果您使用 Microsoft Azure,那么您可设置 userIdentityToCreateSubject ="upn" 或 userIdentityToCreateSubject ="unique_name"。
- 将 groupIdentifier 属性设置为表示用户组成员资格或角色的声明名称。例如,如果您使用 Microsoft Azure,那么可设置 groupIdentifier="groups"。
有关更多 OpenID Connect 客户机配置选项,请参阅 OpenID Connect 客户机。
- 可选:认证过滤器。
如果已启用 openidConnectClient-1.0 功能部件并且未对 openidConnectClient 元素配置 authFilterRef 属性,那么系统通过 OpenID Connect 提供者认证任何未认证的请求。
有关配置认证过滤器的更多信息,请参阅认证过滤器。
- 支持多个 OpenID Connect 提供者。
通过创建多个 openidConnectClient 元素和多个认证过滤器,可将 Liberty 配置为多个 OpenID Connect 提供者的 OpenID Connect 依赖方。每个 openidConnectClient 元素定义与一个 OpenID Connect 提供者的单点登录关系,并使用 authFilterRef 属性引用一个认证过滤器。
- 配置受支持的标识令牌签名算法。
可配置 Liberty OpenID Connect 客户机以在标识令牌中支持 RS256 签名算法。Liberty OpenID Connect 客户机的缺省签名算法为 HS256。如果通过设置 signatureAlgorithm="RS256" 将 RS256 配置为标识令牌的签名算法,那么必须配置 trustStoreRef 和 trustAliasName,除非 OP 支持 JWK 端点。
- 可选:配置“隐式”授权类型。
openidConnectClient-1.0 功能部件使用“授权代码”授权类型以请求用户认证令牌,您可配置 Liberty openidConnectClient-1.0 功能部件以通过将 grantType="implicit" 添加至 server.xml 文件以使用“隐式”授权类型。如果 Liberty 服务器和 OpenID Connect 提供者在不同防火墙中,那么必须使用此配置选项。
- 可选:在处理标识令牌后,Liberty OpenID Connect 依赖方会自动创建单点登录 (SSO) 令牌。您可以通过添加配置属性 disableLtpaCookie="true" 将 Liberty 配置为不创建用于服务器的 SSO 令牌,或用于通过 OpenID Connect 进行保护的资源的 SSO 令牌。如果设置 disableLtpaCookie="true",那么 Liberty OpenID Connect 客户机将仅接受先前已向所配置的 OpenID Connect 提供者进行认证的认证请求,并且认证会话生存期将限制为标识令牌的生存期。
- 可选:可以将 OpenID Connect 客户机配置为选择性地接受有效的 OAuth 2.0 不记名访问令牌作为认证令牌,而不将请求重定向到 OpenID Connect 提供者。如果请求包含有效的 OAuth 2.0 不记名访问令牌,那么 Liberty OpenID Connect 客户机将自动验证该访问令牌,并根据令牌验证结果创建已经过认证的主体集。如果请求不包含访问令牌或者访问令牌无效,那么 Liberty OpenID Connect 客户机会继续将用户重定向到 OpenID Connect 提供者。此功能允许 Liberty 服务器为浏览器客户机和非浏览器客户机(例如 RESTful 客户机)提供服务。可以向配置添加 inboundPropagation="supported" 以启用此功能。
如果托管环境不允许访问 /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>。
结果
子主题
- 调用 OpenID Connect 的授权端点
在 OpenID Connect 中,授权端点处理用户的认证和授权。 - 调用 OpenID Connect 的内省端点
内省端点允许访问令牌的持有者向发出该访问令牌的 OpenID Connect 提供者请求有关访问令牌的一组元数据。该访问令牌必须是通过 OpenID Connect 或 OAuth 认证获取的访问令牌。 调用 OpenID Connect 的撤销端点
撤销端点允许访问令牌或刷新令牌的持有者通知 OpenID Connect 提供者,指出不再需要并且必须撤销已发出的令牌。撤销端点可以撤销通过 OpenID Connect 或 OAuth 认证获取的令牌。调用 OpenID Connect 的注销端点
客户机使用注销端点来清除 Web 浏览器的提供者端会话和 Cookie。- 调用 OpenID Connect 的会话管理端点
会话管理端点允许 OpenID Connect 依赖方监视使用特定 OpenID Connect 提供者 (OP) 的用户的登录状态,同时将网络流量降至最低。在会话管理端点的帮助下,依赖方 (RP) 可注销已从 OpenID Connect 提供者注销的用户。 - 调用 OpenID Connect 的令牌端点
在 OpenID Connect 授权代码流程中,客户机使用令牌端点来获取标识令牌、访问令牌和刷新令牌。 - 调用 OpenID Connect 的 UserInfo 端点
UserInfo 端点返回有关使用 OpenID Connect 认证进行认证的用户的声明。

文件名:twlp_config_oidc_rp.html