#maximo sso keycloak
Explore tagged Tumblr posts
maximopro · 5 years ago
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にします。
Tumblr media
次にClientsからCreateボタンをクリックし、以下のようにMaximoクライアントを設定します。
Tumblr media
URLなどはMaximoのURLを指定してください。次にCredentialsタブでSecretを確認して、こちらの値を保存しておきます。こちらは後でLibertyの設定で使用します。
Tumblr media
次にMapperタブでAdd Builtinからusernameとgroupsを選択して保存します。
Tumblr media
次にRolesメニュからmaximouserロールを以下のように作成します。
Tumblr media
Groups メニューから maximouser グループを作成します。
Tumblr media
Role Mappingsタブから maximouser ロールをアサインします。
Tumblr media
Users からユーザーを作成します。管理ユーザーであるmaxadminを作成します。
Tumblr media
次にGroupsタブから”maximouser“にjoinします。
Tumblr media
以上で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