尝试使用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)。

FQDNOSJDK構成keycloak.example.comCentOS7.1open-jdk 1.8.0_101Keycloak 3.3.0Finalwordpress.example.comCentOS7.1
Wordpress + OneLogin SAML SSOプラグイン

请在Keycloak 2日目的KeycloakAdventCalendar文章中查看Keycloak的设置。此外,请参阅这篇文章以进行Wordpress的设置。请注意,Wordpress尚未本地化为日语,请知悉。

Keycloak服务器(IdP)的配置设定。

请管理员用户登录并按照以下步骤执行。

:information_source: 以降の手順において、設定の入力項目が記述されていない項目は、デフォルト値で設定します。

新增领域

从画面左上角的「选择领域」菜单中点击「添加领域」按钮。按照以下步骤创建领域。

    • 名前 : wordpress

有効 : オン

realm1.png

添加和配置客户端

client1.png

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

从SAML密钥标签中获取密钥信息。

saml-key.png

添加用户到Keycloak

向创建的领域添加用户。

    1. 登录到管理控制台。

 

    1. 选择WordPress领域。

 

    1. 点击“管理”-“用户”菜单。

 

    1. 点击“添加用户”按钮。

 

    1. 按以下输入。

 

    1. 用户名:wp-user1

 

    1. 电子邮件:wp-user1@example.com

 

    1. 用户有效:开启

 

    1. 点击“保存”按钮。

 

    1. 在创建的用户的“凭证”选项卡中设置密码。

 

    1. 在“新密码”和“确认新密码”字段中输入相同的密码。

 

    1. 将“临时”选项关闭。

 

    1. 点击“重置密码”按钮。

 

    弹出确认窗口后,点击“更改密码”按钮。

密码更改确认弹出窗口尚未日语化,但以上操作已完成用户的添加。

WordPress服务器(SP)的设置

安装 SSO 插件来使用 SAML。

    1. 下载插件

 

    1. OneLogin SAML SSO 插件

 

    1. 在WordPress中添加插件。

 

    1. 从WordPress管理控制台点击「插件」菜单

 

    1. 点击「添加新的」按钮

 

    1. 点击「上传插件」按钮

 

    1. 从「浏览」中选择下载的插件,然后点击「立即安装」

 

    激活添加的插件(点击“激活”按钮)

插件安装已完成。

使用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>
:warning: 上記XML中の秘密鍵や証明書文字列は、長いため省略しています。
wordpress-plugin-setting-cut4.png
:warning: (注1) 証明書や秘密鍵項目では、以下のように BEGIN/END の宣言を記述しなければなりません。
-----BEGIN CERTIFICATE-----
証明書文字列  
-----END CERTIFICATE-----  

-----BEGIN RSA PRIVATE KEY-----  
秘密鍵文字列  
-----END RSA PRIVATE KEY-----  

这样就完成了插件设置。

添加WordPress用户

我要在WordPress上添加用户。

    1. 从wordpress管理控制台中点击“用户”菜单

 

    1. 点击“添加新用户”按钮

 

    1. 添加以下用户:

wp-user1

用户名 : wp-user1

邮箱 : wp-user1@example.com

发送用户通知 : 关闭
除上述设置外,其他都是默认设置(未设定、关闭)。

点击“添加新用户”按钮。

确认动作

keycloak-saml-login2.png
login-success.png

即时提供(即时供应)的JIT(Just In Time)配置

即时服务提供(JIT)是指在SP端没有用户存在时,根据IdP的用户信息和属性映射将用户的信息与SP进行协作,以创建和设置用户的功能。 JIT提供必须正确设置属性映射,但它具有无需逐个服务进行用户管理的优点。

在WordPress的”SSO/SAML设置”中,勾选”如果用户不存在则创建用户”选项。如果Keycloak端更改了用户属性并且想要将更改同步到WordPress,则勾选”更新用户数据”选项。

user-add1.png

让我们在Keycloak中创建以下用户,然后进行测试。

    • ユーザー名 : wp-user2

Eメール : wp-user2@example.com

user-add2.png
user-add3.png
user-add4.png
user-add5.png

概括

SAML_new2.png

非常感谢你。

参考资料-

    • SAML | Keycloak Documentation

 

    • NRI OpenStandia Keycloak日本語ドキュメント | SAML

 

    • WordPress

 

    OneLogin SAML SSO
广告
将在 10 秒后关闭
bannerAds