この記事は DENSOアドベントカレンダー2021 の3日目の記事です。
はじめに
Oktaとは?
認証認可を提供するIDaasの一つ
https://www.okta.com/jp/
KeyCloakとは?
認証認可を提供するOSSの一つ
https://www.keycloak.org/
なぜOktaとKeyCloakを連携させる必要があるのか
もともとKeyCloakで開発に使用するAWSなりにシングルサインオンの環境を構築していたのですが、Oktaに移行をすることになりました。その場合、通常であればOktaで認証認可を行うように構築すると思うのですが、今回は事情があり一部のユーザーはKeyCloakを使い続ける必要がありました。
ただ、一人のユーザーの認証を行う場所は一箇所にしたかったためOktaにユーザー情報がある場合はKeyCloakからOktaを参照するようにしました
構成例
以下のようにあるアプリケーション(今回だとアプリケーションB)だけはKeyCloakにユーザーがいる場合はKeyCloakで認証、Oktaにユーザーがいる場合はKeyCloakからOktaへ認証をするようにします。
設定について
概要
- KeyCloakのIdentity ProviderにOktaを設定
- Okta側でSAML2.0のアプリとしてKeyCloakを登録
を行います。
具体的な手順
KeycloakでIdentity Providerを作成する
Keycloakの管理者画面を開きIdentity Providerの作成を選択してSAML v2.0を選択します。
次にKeycloakのAlias(なんでもよい), Display Name(なんでもよい)を設定します。ここではまだSaveはしません。理由はとでメタデータのインポートをするためです。
ここでKeycloakのRedirect URIをコピーしておきます。(これはOkta側で設定するためです)
更にKeycloakのService Provider Entity IDをコピーしておきます。(これはOkta側で設定するためです)
ここで画面は閉じずそのままにしておきます。(後で設定をするためです)
OktaでSAML 2.0のアプリを作成する
Oktaの管理者画面を開きSAML 2.0のアプリケーションを作成します。
任意のアプリケーション名を設定しNextを選択
その後表示される設定画面で
1.Single sign on URLに、KeycloakのRedirect URIをペーストする
2.Audience URIにKeycloakのService Provider Entity IDをコピーする
その他は変えずに、OktaでNext->Finishを選択しアプリケーションの作成を完了します。
再度作成したアプリケーションを選択してSign Onタブを開きます。
ここに表示されるIdentity Provider metadataのリンクのアドレスをコピーする
最後に作成したアプリケーションに対してアクセス権を付与しておきます。
KeyCloak側でOktaのメタデータのインポート
再度KeyCloakの画面に戻り
KeycloakのImprot from URLにOktaのメタデータのリンクをペーストしてSaveする
これで設定は完了です。
動作確認について
別ブラウザ等でKeyCloakのログイン画面を見るとはじめは表示されていなかったIdentity Providerの情報が表示されるようになります。(今回はsamlという名前)
このリンクをクリックするとOktaのログイン画面に表示され
Okta側でログインが完了するとKeyCloak側でのログインもでき目的のアプリケーションにアクセスできるようになります。
まとめ
KeyCloakのIdPにOktaを設定する方法についてまとめました。すこしトリッキーな構成ですが参考になれば幸いです。