#maximo sso keycloak
Explore tagged Tumblr posts
Text
KeycloakでMaximoのOpenID Connect SSOを実装する
Maximoで標準サポートされているSingle Sign On (SSO)プロトコルはSAMLです。基���的にはAppServerSecurityと同様でMaximoの内部認証ではなくWeb サーバーの機能を使って認証を行います。WebSphere Application Server (WAS)ではtrust association interceptor (TAI)機能を使って、SAMLのプロトコルを処理しています。
現在主流となっているSSOプロトコルは他にもOpenID Connectがあります。こちらはOAuthをベースに認証プロトコルを拡張したもので、シンプルさから人気が高まっています。Maximoとしては認証自体を外部で処理している関係で、公式サポートの問題を除けば認証プロトコルは問わないはずです。今回はOpenID Connectで認証できるか試してみたいと思います。
OpenID Connect, SAML双方をサポートしたIdentity and Access Management (IAM)にKeycloakがあります。IAMとしては新興のOSSですが、こちらも設定の簡便さから人気が高まっています。同じIBMの製品とも言えますが、WASのサポートはそこまで手厚くありません。しかしWAS LibertyでもOpenIDのサポートはされていますので、標準に則ってる限りでは動作するはずです。今回はOpenID Connectの実装を試行してみますが、Maximoではまだ公式サポートされていないことをご注意ください。
ではKeycloakの設定を行ってみます。Keycloakの導入は以下のYAMLを使って、docker-compose upで立ち上げます。
https://github.com/keycloak/keycloak-containers/blob/master/docker-compose-examples/keycloak-postgres.yml
以下のコマンドを実行するといいでしょう。
curl https://github.com/keycloak/keycloak-containers/blob/master/docker-compose-examples/keycloak-postgres.yml --output keycloak.yml docker-compose up -d -f keycloak.yml
http://localhost:8080 からkeycloakにアクセスできるか確認します。adminでログインした後、クライアントとユーザーの設定を行います。
Realm SettingsでLoginタブを開きます。今回は開発環境なのでRequire SSLをnoneにします。
次にClientsからCreateボタンをクリックし、以下のようにMaximoクライアントを設定します。
URLなどはMaximoのURLを指定してください。次にCredentialsタブでSecretを確認して、こちらの値を保存しておきます。こちらは後でLibertyの設定で使用します。
次にMapperタブでAdd Builtinからusernameとgroupsを選択して保存します。
次にRolesメニュからmaximouserロールを以下のように作成します。
Groups メニューから maximouser グループを作成します。
Role Mappingsタブから maximouser ロールをアサインします。
Users からユーザーを作成します。管理ユーザーであるmaxadminを作成します。
次にGroupsタブから”maximouser“にjoinします。
以上でIAMの設定は終了です。次にMaximoの構成を行います。今回はWebSphere Libertyをつかった構成を試してみます。
Maximoをインストールした後、以下の手順の1を実行します。ただしLibertyのweb.xmlは/opt/IBM/SMP/maximo/deployment/was-liberty-default/config-deployment-descriptorsにあるので注意してください。
https://www.ibm.com/support/pages/sites/default/files/inline-files/$FILE/Configuring%20SAML%20Security.pdf
次にmaximo.propertiesに以下を挿入します。
mxe.useAppServerSecurity=1 mxe.webclient.skin=iot18 mxe.useSAML=0
server.xmlを以下のファイルのように編集します。場所は/opt/IBM/SMP/maximo/deployment/was-liberty-default/config-servers/maximo-ui/maximo-ui-server/以下にあります。
server.xml
http://192.168.128.222:8080 をKeycloakのホスト名に置き換えてください。
主なポイントを説明します。
MaximoではJava EEセキュリティに maximouser ロールを要求します。Keycloakに割り当てられたロールは access-id のような形に変換されるため、security-roleとマッピングする必要があります。
<security-role name="maximouser"> <group access-id="group:http://192.168.128.222:8080/auth/realms/master/maximouser"/> </security-role>
WebAppSecurityの設定ではssoUseDomainFromURLを有効にします。またSSLを使用しない場合は ssoRequireSSL を無効にします。
<webAppSecurity httpOnlyCookies="true" ssoUseDomainFromURL="true" ssoRequiresSSL="false"/>
OpenID Connect Clientの設定ですが、 clientSecret には上記で取得したSecretを指定します。 redirectToRPHostAndPort はMaximoのURLを設定してください。
<openidConnectClient id="RP" httpsRequired="false" redirectToRPHostAndPort="http://192.168.128.222" signatureAlgorithm="RS256" clientId="maximo-ui" clientSecret="5f042d71-722e-46a4-908e-bba2ffb690f3" userIdentifier="preferred_username" groupIdentifier="groups" issuerIdentifier="http://192.168.128.222:8080/auth/realms/master" jwkEndpointUrl="http://192.168.128.222:8080/auth/realms/master/protocol/openid-connect/certs" authorizationEndpointUrl="http://192.168.128.222:8080/auth/realms/master/protocol/openid-connect/auth" tokenEndpointUrl="http://192.168.128.222:8080/auth/realms/master/protocol/openid-connect/token">
WARファイルをリビルドし、Libertyを立ち上げます。URLにアクセスしKeycloakの認証を通しMaximoの画面が出れば成功です。
今回はKeycloakを使ってMaximoのSSOをOpenID Connectで実現してみました。OpenID Connectは様々なクラウドベンダーでもSaaS製品が提供いますので、Keycloakに限らず今回の方式は応用が可能です。また、Socialログインも同様のプロトコルを使用していますので、Googleアカウントなどの連携も可能であるはずです。
0 notes