KeycloakでOpenID Connectを使ってSSOしたときのメモ(認可コードフロー)
はじめに
Keycloak で OpenID Connect を使って SSO をしてみたときのメモです。
今回の内容は以下の記事を参考に実際にやってみた際の手順になります。
ですので、詳しい内容は以下の記事をみていただけたらと思います。
qiita.com
前提条件
Keycloak に関しては、以下の記事で構築済みとします。(http://localhost:8080 で起動済みであることを前提とします)
http://kent056-n.hatenablog.com/entry/2018/06/11/235544kent056-n.hatenablog.com
また、認可コードフローに関しては先ほど紹介した記事の「というか、認可コードフローってなんだっけ?」に記載してありますので、割愛します。
環境
Relying Party の環境
項目 | 値 |
---|---|
OS | CentOS 7.2 |
URL | http://192.168.33.11 |
クライアントID(client_id) | apache24 |
リダイレクトURI | http://192.168.33.11/private/callback |
OpenID Provider(Keycloak の環境)
項目 | 値 |
---|---|
OS | CentOS 7.2 |
URL | http://192.168.33.10:8080 |
エンドポイント | http://192.168.33.10:8080/auth/realms/master/.well-known/openid-configuration |
Relying Party(RP)構築
Relying Party に関しては、「Relying Party (RP) を作る」を参考にmod_auth_openidc
を使って進めていきます。
環境の用意
VirtualBox と Vagrant を利用して Relying Party のサーバーを用意していきます。
$ mkdir relying_party $ cd relying_party $ vagrant init bento/centos-7.2
次に、ip アドレスと ssh のポート番号が重複しないように Vagrantfile を編集し、以下の二行を追記します。
config.vm.network "private_network", ip: "192.168.33.11" config.vm.network "forwarded_port", guest: 22, host: 22222, id: "ssh"
編集できたら保存し、サーバーの起動及びログインをします。
$ vagrat up $ vagrant ssh
ログインできたら、必要なものをインストールしていきます。vim は任意です。
# sudo -s # yum install vim # yum install mod_auth_openidc
Keycloak 設定
Keycloak 管理コンソールに管理者でログインしておきます。 このとき、realm が Master になっていることを確認してください。(realm が Master である必要はないですが、realm によって設定が変わる箇所があるので一応...)
クライアントの設定
[Clients] > [Create]
からクライアントの設定をしていきます。
Client ID は Relying Party の設定で書いた apache24、Client Protocol はopenid-connectを選択して Save を押します。 また、Access Type を public から confidential 、Consent Required を ON 、Valid Redirect URIs に
http://192.168.33.11/private/callback
をそれぞれ設定して Save を押します。
上記の操作をした場合、以下のような設定になってるかと思います。
次に、Clients の Credentials タブを選択し、Client Authenticator が Client and Secret であることを確認し、Secret をメモしておきます。(Secret は後で使います)
ユーザーの追加
SSO するユーザーを追加しておきます。
[Users] > [Add user]
から追加していきます。今回は Username を u111 、Firest Name を u111 、Last Name を test として登録しておきました。
登録できたら、
[Credentials]
タブの Manage Password からパスワードを設定しておきます。
Relying Party 設定
mod_auth_openidc の設定
「mod_auth_openidc(Apache)を設定する」を参考に httpd.conf を編集して Relying Party の設置をおこなっていきます。
# vim /etc/httpd/conf/httpd.conf
今回は httpd.conf に以下の内容を追記しました。
IDCPreservePost ディレクティブに関してはエラーが出ていたので、コメントアウトしました(ちゃんと調べよう...)
個人的に感じた注意点としては以下の二点ですかね。
・OIDCProviderMetadataURL ディレクティブに設定する URL が realm によって変わる
http://192.168.33.10:8080/auth/realms/【realm 名】/.well-known/openid-configuration
・OIDCClientSecret に先ほどメモしておいた Secret を入れる
LoadModule auth_openidc_module modules/mod_auth_openidc.so OIDCProviderMetadataURL http://192.168.33.10:8080/auth/realms/master/.well-known/openid-configuration OIDCClientID apache24 OIDCClientSecret c45d6804-40d6-4b46-8d62-6f6b36bba7d6 OIDCResponseType code OIDCScope "openid" OIDCSSLValidateServer Off OIDCProviderTokenEndpointAuth client_secret_basic OIDCRedirectURI http://192.168.33.11/private/callback OIDCCryptoPassphrase passphrase #OIDCPreservePost On <Location /private> AuthType openid-connect Require valid-user </Location> <Location /public> OIDCUnAuthAction pass AuthType openid-connect Require valid-user </Location>
コンテンツの追加
ドキュメントルート以下にコンテンツをおいておきましょう。今回は /var/www/html/private/
以下に 以下のような html ファイルを index.html としておいておきます。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>SSO の確認</title> </head> <body> <h1> success!!</h1> </body> </html>
確認
http://192.168.33.11/private/index.html
にアクセスします。
以下のように Keycloak のログイン画面へ遷移するので、Username と Password をそれぞれ入力します。
すると、以下のようなに同意を求められるので同意します。
最終的に以下のような画面が表示されたら成功です。
おわりに
色々設定できそうなのでやっていきたい。