3.4. OIDC SAML 身份代理
如果您的身份提供程序没有实现 OpenID Connect,而只有旧的基于 XML 的 SAML2.0 SSO 协议,则无法将 Quarkus 用作 SAML 2.0 适配器,类似于 quarkus-oidc
如何用作 OIDC 适配器。
但是,许多 OIDC 供应商,如 Keycloak、Okta、Auth0 和 Microsoft ADFS 为 SAML 2.0 网桥提供 OIDC。您可以在 OIDC 供应商中创建到 SAML 2.0 供应商的身份代理连接,并使用 quarkus-oidc
验证您的用户到此 SAML 2.0 供应商,并具有 OIDC 供应商协调 OIDC 和 SAML 2.0 通信。至于 Quarkus 端点,他们可以继续使用相同的 Quarkus Security、OIDC API、注释,如 @Authenticated
、SecurityIdentity
等。
例如,假设 Okta
是您的 SAML 2.0 供应商,Keycloak
是您的 OIDC 供应商。以下是如何使用 Okta
SAML 2.0 供应商将 Keycloak
配置为代理的典型序列。
首先,在 Okta
Dashboard/Applications
中创建一个新的 SAML2
集成:
例如,将其命名为 OktaSaml
:
接下来,将其配置为指向 Keycloak SAML 代理端点。此时,您需要知道 Keycloak 域的名称,如 quarkus
,并假定 Keycloak SAML 代理别名为 saml
,输入端点地址为 http://localhost:8081/realms/quarkus/broker/saml/endpoint
。将服务供应商(SP)实体 ID 输入为 http://localhost:8081/realms/quarkus
,其中 http://localhost:8081
是 Keycloak 基础地址,而 saml
是代理别名:
接下来,保存此 SAML 集成并记录其元数据 URL:
接下来,在 Keycloak 中添加 SAML 供应商:
首先,照常创建新域或将现有域导入到 Keycloak
。在这种情况下,域名必须是 quarkus
。
现在,在 quarkus
域属性中,导航到 Identity Providers
并添加新的 SAML 供应商:
请注意,别名被设置为 saml
,Redirect URI
为 http://localhost:8081/realms/quarkus/broker/saml/endpoint
,Service provider entity ID
是 http://localhost:8081/realms/quarkus
,这些值与您在上一步中创建 Okta SAML 集成时输入的值相同。
最后,设置 Service entity descriptor
以指向上一步末尾的 Okta SAML 集成元数据 URL。
接下来,您可以导航到 Authentication/browser/Identity Provider Redirector config
,将 Alias 和 Default Identity Provider 属性注册为默认提供程序,并将 Alias
和 Default Identity Provider
属性设为 saml
。如果您没有将其配置为默认供应商,在身份验证时提供 2 个选项:
- 使用 SAML 供应商进行身份验证
- 直接使用名称和密码向 Keycloak 进行身份验证
现在,将 Quarkus OIDC web-app
应用程序配置为指向 Keycloak quarkus
realm quarkus.oidc.auth-server-url=http://localhost:8180/realms/quarkus
。然后,您已准备好使用 OIDC 到 SAML 网桥(由 Keycloak OIDC 和 Okta SAML 2.0 供应商)向 Okta SAML 2.0 供应商验证 Quarkus 用户。
您可以配置其他 OIDC 供应商,以提供与为 Keycloak 执行的方式相似的 SAML 网桥。