前提知識(筆者のレベル)
・Sier経歴2年、Win,Linuxどちらも触れるってレベル
・認証についての知識は用語をちらほら知ってるレベル
(SSOとかMFAとか)
・ADについての基礎知識がある
⇒keycloakは認証用外部DBとしてLDAPやADを連携することが可能
※ちなみにこの記事を書いたのは2018年7月時点なので、少し情報が古い箇所があるかもしれないのでご了承を
keycloakとは
・OSSでシングルサインオンを実現する認証ソフトウェア
・認証、認可も可能でSAML、OpenIDConnect、OAuth2.0に対応
・SSO基盤の分野では後発だが、コミュニティベースでの開発が進められており、勢いのあるソフトウェア
・「クライアントアダプタ」と呼ばれるKeycloakからのアクセストークン取得やアクセス制御をするもの。
⇒いわゆるエージェント方式に相当
keycloakの代表的な機能
1.シングルサインオン
2.API認可
3.アプリケーション向けのライブラリ提供
4.外部IdP連携
5.外部ユーザーデータストアとの連携
6.豊富なカスタマイズポイント
シングルサインオン
以下に対応
・OpenID Connect
・SAML2.0
実現方法
①keycloakクライアントアダプターを導入してSAML2.0/OIDCに対応させる
これがベースのやり方で、レガシーな社内アプリケーションを使用している場合には
クライアントアダプターが対応していない場合もある。。
⇒リバースプロキシ型を利用して対応!
API認可
OAuth2.0を利用して、認可サーバーとしてkeycloakを利用する。
今後注目されるワード
FAPI(Finacial API)
FIDO(Fast IDentity Online:ファイド)
アプリケーション向けのライブラリ提供
クライアントアダプターと呼ばれるライブラリを各アプリケーションに組み込むことで
SSO(OIDC、SAML)や認可(OAuth)を行うことができる
⇒対応しているプラットフォームは少ない。。
⇒そんなときは、「リバースプロキシ方式」がある
以下を使用してリバプロ型を利用することが可能
- Apacheのmod_auth_openidc (一般的なシングルサインオンの場合)
- 3scaleのapicast (API認可認証の場合)
⇒今後はGO言語のベースのproxyを用意して、
OpenAMとの違いは?
・インストール、設定が簡単。(というよりOpenAMのほうが複雑)
⇒Java8JDKのインストールと、配布されているtar/zipを解凍するだけ!!
⇒GUIで設定可能(CLIツールもあり)
・Dockerのイメージもあるので簡単にたてることもできる
・導入も負荷が高くないため、リスクベース認証など凝ったことしなければ
keycloakのほうがシンプルにできる
⇒「シングルサインオンやりたいです!」とか「ちょっとだけ多要素認証やりたい」「そんな複雑な認証は必要ないです」って感じの要件であればOpenAMよりもkeycloakのほうがハマる
もう少し細かく言うと
以下はkeycloakではできない
・リスクベース認証
・代理認証
・対応しているプラットフォームがOpenAMに比べて少ない。
⇒けど有名どころは抑えているので、WebアプリをIISで立てているとか
JBossの古いバージョン使っているとか、がなければ大体使える
結局どっちがいいの?
結論から言うと、OpenAMのほうが安定しているので「現状は」優勢
keycloakは限定要件(SAMLだけやりたい、ソーシャル連携だけやりたい)であればハマるパターンもある。
一般企業の認証基盤として
keycloakを導入するのはちょっと怖いかなーという印象。
なぜなら、keycloakはコミュニティが活発でバージョンアップのサイクルも早い。
⇒認証基盤を半年に一回バージョンアップさせる、ってのは現実的に考えてありえない
(費用とか工数とか鑑みて)
keycloakも機能的には基本的なところは網羅しているが、
まだまだバグも多く、どんどん改修⇒アップグレードしているので安定性、という意味では
OpenAMを採用したほうがよい。
だけどOpenAMはコミュニティが停滞している、ソースコードも膨れ上がっていて
カスタマイズには高度なスキルが求められる。
それに比べて扱いやすいkeycloakが安定性が増していけば、
今後「OpenAM⇒keycloakへの移行」なんて案件が増えていくことが予想される。
結論
今のうちにkeycloakの仕様を把握しておいてノウハウを貯めておき
近い将来の認証基盤公開案件を狙うことが可能
なので今後もkeycloakのキャッチアップをどんどん進めていきたいと思います。
動作環境
項目 | 動作環境 |
---|---|
ハードウェア | RAM 最低512M以上 HDD 最低 1GB以上 |
プラットフォーム | Javaが動作するOS Win,LinuxどっちもOK |
Java Development Kit | Java Development Kit 8 |
対応仕様 | SAML2.0 OpenID Connect OAuth2.0 |
参考URL
・OpenStandia
http://openstandia.jp/oss_info/keycloak/
・keycloakとは
https://qiita.com/daian183/items/30f01e162e03567ff21b