尝试使用Keycloak的SAML(WordPress版)
今天要做的事情 zuò de shì
本次Keycloak Advent Calendar的第四天,我们将尝试使用SAML将Keycloak和WordPress进行集成。在Keycloak的文档” SAML VS OIDC “中,推荐使用OIDC而不是SAML,但是由于SAML已经有了实践经验并且更加成熟,许多系统都采用了它。在Keycloak中,SAML2.0和OIDC都可以作为SSO认证协议进行使用。在可用的SSO认证协议中,我们这次将尝试SAML认证集成。
SAML的概述
SAML是“安全断言标记语言”的缩写。它是由OASIS(结构化信息标准推动协会)制定的基于XML的标记语言规范,用于在不同域的系统之间安全传输认证和授权信息。在各种服务中都使用了基于SAML的认证协作。
用于验证动作的服务器配置
在WordPress中有几个用于SAML的插件,但这次我们将使用WordPress + OneLogin SAML SSO插件来确认与Keycloak的SAML集成。我们准备了一个用于测试的服务器如下所示。Keycloak是身份服务提供商(IdP),WordPress是服务提供商(SP)。
Wordpress + OneLogin SAML SSOプラグイン
请在Keycloak 2日目的KeycloakAdventCalendar文章中查看Keycloak的设置。此外,请参阅这篇文章以进行Wordpress的设置。请注意,Wordpress尚未本地化为日语,请知悉。
Keycloak服务器(IdP)的配置设定。
请管理员用户登录并按照以下步骤执行。

新增领域
从画面左上角的「选择领域」菜单中点击「添加领域」按钮。按照以下步骤创建领域。
-
- 名前 : wordpress
有効 : オン

添加和配置客户端

※ 如果在创建客户端时默认使用role list映射器,会导致OneLoginSSO端出现错误。请删除role list映射或在role list编辑中将Single Role Attribute改为ON。
从SAML密钥标签中获取密钥信息。

添加用户到Keycloak
向创建的领域添加用户。
-
- 登录到管理控制台。
-
- 选择WordPress领域。
-
- 点击“管理”-“用户”菜单。
-
- 点击“添加用户”按钮。
-
- 按以下输入。
-
- 用户名:wp-user1
-
- 电子邮件:wp-user1@example.com
-
- 用户有效:开启
-
- 点击“保存”按钮。
-
- 在创建的用户的“凭证”选项卡中设置密码。
-
- 在“新密码”和“确认新密码”字段中输入相同的密码。
-
- 将“临时”选项关闭。
-
- 点击“重置密码”按钮。
- 弹出确认窗口后,点击“更改密码”按钮。
密码更改确认弹出窗口尚未日语化,但以上操作已完成用户的添加。
WordPress服务器(SP)的设置
安装 SSO 插件来使用 SAML。
-
- 下载插件
-
- OneLogin SAML SSO 插件
-
- 在WordPress中添加插件。
-
- 从WordPress管理控制台点击「插件」菜单
-
- 点击「添加新的」按钮
-
- 点击「上传插件」按钮
-
- 从「浏览」中选择下载的插件,然后点击「立即安装」
- 激活添加的插件(点击“激活”按钮)
插件安装已完成。
使用SSO插件配置SAML。
插件的配置需要IdP的信息。访问Keycloak的SAML信息终点以获取信息。访问https://keycloak.example.com/auth/realms/wordpress/protocol/saml/descriptor时,可以获取到以下XML文件。
<?xml version="1.0" encoding="UTF-8"?>
<EntitiesDescriptor Name="urn:keycloak" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<EntityDescriptor entityID="https://keycloak.example.com/auth/realms/wordpress">
<IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<KeyDescriptor use="signing">
<dsig:KeyInfo>
<dsig:KeyName>xdyS...HLxc</dsig:KeyName>
<dsig:X509Data>
<dsig:X509Certificate>MIICnT...RXx3Aw==</dsig:X509Certificate>
</dsig:X509Data>
</dsig:KeyInfo>
</KeyDescriptor>
<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://keycloak.example.com/auth/realms/wordpress/protocol/saml"/>
<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://keycloak.example.com/auth/realms/wordpress/protocol/saml"/>
<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://keycloak.example.com/auth/realms/wordpress/protocol/saml"/>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://keycloak.example.com/auth/realms/wordpress/protocol/saml"/>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://keycloak.example.com/auth/realms/wordpress/protocol/saml"/>
</IDPSSODescriptor>
</EntityDescriptor>
</EntitiesDescriptor>



BEGIN
/END
の宣言を記述しなければなりません。-----BEGIN CERTIFICATE-----
証明書文字列
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
秘密鍵文字列
-----END RSA PRIVATE KEY-----
这样就完成了插件设置。
添加WordPress用户
我要在WordPress上添加用户。
-
- 从wordpress管理控制台中点击“用户”菜单
-
- 点击“添加新用户”按钮
-
- 添加以下用户:
wp-user1
用户名 : wp-user1
邮箱 : wp-user1@example.com
发送用户通知 : 关闭
除上述设置外,其他都是默认设置(未设定、关闭)。
点击“添加新用户”按钮。
确认动作


即时提供(即时供应)的JIT(Just In Time)配置
即时服务提供(JIT)是指在SP端没有用户存在时,根据IdP的用户信息和属性映射将用户的信息与SP进行协作,以创建和设置用户的功能。 JIT提供必须正确设置属性映射,但它具有无需逐个服务进行用户管理的优点。
在WordPress的”SSO/SAML设置”中,勾选”如果用户不存在则创建用户”选项。如果Keycloak端更改了用户属性并且想要将更改同步到WordPress,则勾选”更新用户数据”选项。

让我们在Keycloak中创建以下用户,然后进行测试。
-
- ユーザー名 : wp-user2
Eメール : wp-user2@example.com




概括

非常感谢你。
参考资料-
-
- SAML | Keycloak Documentation
-
- NRI OpenStandia Keycloak日本語ドキュメント | SAML
-
- WordPress
- OneLogin SAML SSO