はじめに

突然ですが、今回、NRI OpenStandiaの有志メンバーにて、Keycloakのアドベントカレンダーを執筆することになりました。Keycloakの機能のご紹介、実際に触ってみてわかること、NRI OpenStandiaでのKeycloakの取り組み等、この25日間でお伝えできればと思っています。

何故、Keycloak?

Keycloakはオープンソースのアイデンティティ・アクセス管理ソフトウェアです。シングルサインオンやAPIアクセスの認証・認可制御を実現するもので、この分野のソフトウェアとして後発の部類に入ります。現在コミュニティベースの開発が進められており、この分野のソフトウェアとしては最も勢いのあるソフトウェアの1つと言われています。技術トレンドの発信元として有名なThouthtWorksのTechnology Radarでも、この3月(2017年3月)に初めて名前が上がりました。またつい先日の最新版ではASSESSからTRIALに評価が変わっており、ますます注目度が上がっています。
https://www.thoughtworks.com/radar/platforms/keycloak
image.png

世界、日本での注目度は?

参考までに最近5年間の注目度をGoogleトレンドで見ました。
(最近、商用ベースでの取り扱いにシフトしたOpenAMと比較)

■OpenAM v.s. Keycloakの全世界、5年間版
WS000034_枠.jpg

■OpenAM v.s. Keycloakの日本、5年間版
WS000035_枠.jpg

世界的には注目度が上がってきている一方で、日本ではまだまだ普及が進んでいないようです。NRIもKeycloakの日本での盛り上がりに一役貢献できればと考えています。

:point_up_2:なお、NRIはこれまで通りForgeRock OpenAMの取り扱いも継続していきます。ForgeRockはこの分野では誰もが認めるマーケットリーダーであり、機能・実績共に頭1つ抜けています。お客様の要件に応じて適宜使い分けが必要と考えています。

他社さんの取り組み

日本でKeycloak関連の情報発信をされている企業としては日立製作所様が有名です。下記の@IT記事にて情報発信されていますのでぜひご参照ください。
http://www.atmarkit.co.jp/ait/articles/1708/31/news011.html

Keycloakの提供機能

KeycloakドキュメントのServer Admin(日本語版)に機能について記載がありますので、そちらから引用します。

  • ブラウザー・アプリケーションに対するシングルサインオンとシングルサインアウト。
  • OpenID Connectのサポート。
  • OAuth 2.0のサポート。
  • SAMLのサポート。
  • アイデンティティー・ブローカリング - 外部のOpenID ConnectもしくはSAMLに対応したアイデンティティー・プロバイダーによる認証。
  • ソーシャル・ログイン - Google、GitHub、Facebook、Twitterや他のソーシャル・ネットワークによるログイン。
  • ユーザー・フェデレーション - LDAPやActive Directoryからのユーザー同期。
  • ケルベロス連携 - ケルベロス・サーバーにログイン済のユーザーに対する認証連携。
  • ユーザー、ロール、ロール・マッピング、クライアントと設定を一元管理するための管理コンソール。
  • ユーザーに自分達のアカウントを一元管理することを許可するためのアカウント管理コンソール。
  • テーマ対応 - すべての利用者向け画面についてカスタマイズでき、アプリケーションとブランディングを統合可能。
  • 二要素認証 - Google AuthenticatorやFreeOTPを使用したTOTP/HOTPのサポート。
  • ログイン・フロー - オプションの利用者自身によるセルフ・レジストレーション、パスワード・リカバリー、電子メールによる検証、強制パスワード変更機能など。
  • セッション管理 - 管理者や利用者が自分のセッションを参照・管理することが可能。
  • トークン・マッパー - ユーザー属性やロールなどをトークンやステートメントにどのように反映するかの指定。
  • レルム、アプリケーション、ユーザー単位のNot-beforeリボケーション・ポリシー。
  • CORSのサポート - CORSに対応済みのクライアント・アダプター。
  • サービス・プロバイダー・インターフェイス(SPI) - サーバーの様々な側面をカスタマイズするための数多くのSPI。認証フロー、ユーザー・フェデレーション・プロバイダー、プロトコル・マッパーなどその他多数。
  • JavaScript、WildFly、JBoss EAP、Fuse、Tomcat、Jetty、Springなどのクライアント・アダプター。
  • OpenID Connectのリソース・プロバイダー・ライブラリ、もしくは、SAML 2.0のサービス・プロバイダー・ライブラリをもつ、あらゆるプラットフォーム/言語のサポート。

いくつかの機能については、今回のKeycloak by OpenStandia Advent Calendar 2017の中で詳細を紹介できるかと思いますのでご期待ください!

Keycloakのライセンス

Keycloakは、Apache 2.0ライセンスで配布されています。使用ライセンスの明記を条件にソースコードの自由な改変と公開が認められますので、自社プロダクトに組み込むといった使い方もしやすいと思います。

OpenAMとの機能比較

もう少し細かい機能でSSOの代表的なプロダクトであるOpenAMと比較してみます。

カテゴリ 機能 Keycloak OpenAM
認証 多要素認証
OTP
リスクベース認証
デスクトップSSO
外部IdP認証
代理認証 ○※1
認可 ユーザ属性アクセス制御 △※2
ロールベースアクセス制御 △※2
その他アクセス制御(URL、IPアドレス、時間帯など) △※2
セルフサービス アカウント登録
パスワードリセット
ユーザ属性管理
エージェント/クライアントアダプター 対応プラットフォーム 少ない 多い
その他 標準プロトコルへの対応(SAML2.0/OIDC1.0/OAuth2.0)
レガシー標準プロトコルへの対応(SAML1.x/WS-Federationなど)
コードベース 小さい 巨大
オープン/クローズド オープン バージョン13系まではオープン、以降は最新版はクローズド
  • ※1 OpenAMの周辺プロダクトであるOpenIGとの組み合わせで実現となります
  • ※2 Keycloakの商用版であるRed Hat Single Sign-On (RH SSO)ではまだTechnology Preview扱いです

こうやって見ると、機能面ではOpenAMは全部○と圧倒していますね・・・。正直なところ機能面ではOpenAMにまだまだ劣りますが、過去のしがらみが少ない新しいソフトウェアなのでコードベースは小さく、メンテナンスはしやすいと思います。

また、残念ながら昨年末にOpenAMのバージョン13より後はクローズドになってしまいました(最新版はリリースから約2年後にOSSとしてリリースされる予定)。そのため、OSSのSSOプロダクトとなると、今後はKeycloakが有力候補になるのではないかと思っております。実際に弊社でも既にKeycloakは本番環境で稼働中ですが、非常に安定して動いてくれています :smile:

ちなみにですが、先日行われましたOSSセキュリティ技術の会 第二回勉強会で弊社の @wadahiro が使用事例について発表してきましたので、そちらの資料も参考にしていただければと思います。

Keycloakの特徴的なところ

Keycloakでは本体であるSAML2.0/OAuth2.0/OIDCの認証認可サーバ以外に、クライアントアダプターというものが配布されています。クライアントアダプターはOpenAMで言うエージェント相当で、SSO保護対象のアプリケーションやアプリケーションサーバなどに組み込んで使用します。いわゆる、エージェント方式とよく言われるSSO方式となります。クライアントアダプターがアプリケーションに代わり標準プロトコルでKeycloakサーバと会話し、SSOを実現してくれるというわけですね。

クライアントアダプターは大きく、OpenID Connect用とSAML2.0用の2つが提供されています。以下に、対応プラットフォームとそのバージョンの一覧をまとめています(Keycloak 3.4.0.Final時点のものです)。

OpenID Connect用

対応プラットフォーム 対応バージョン
Keycloak Proxy -
WildFly 10, 9, 8
JBoss EAP 7, 6
JBoss AS 7.1
JBoss Fuse 6.2, 6.3
JavaScript -
Jetty 9.4, 9.3, 9.2, 9.1, 8.1
Tomcat 8, 7, 6

SAML2.0用

対応プラットフォーム 対応バージョン
WildFly 10, 9
JBoss EAP 7, 6
JBoss AS 7.1
Jetty 9.4, 9.3, 9.2, 8.1
Tomcat 8, 7, 6

この中で少し特殊なアダプターとして、Keycloak Proxyがあります。これは単体で動作するリバースプロキシでして、リバースプロキシ型のSSOをするものです。詳細は @yagiaoskywalker が7日目で書いてくれますので、是非そちらも読んでいただければと思います。

なお、上記の対応プラットフォーム以外のアプリケーションをKeycloakでSSOしたい! という時ですが、ご安心ください。Keycloakは標準プロトコルに対応しています(というかそれしか喋れません)ので、アプリケーション側がSAML2.0やOpenID Connectに対応していれば簡単にSSOできます。有名所のパッケージソフトウェアやクラウドサービスであれば、SAML2.0かOpenID Connectであれば対応しているところが多いかと思います。スクラッチ開発のアプリケーションであっても、最近のフレームワークやライブラリであればSAML2.0またはOpenID Connectに対応することは比較的容易かと思います。

一方、既存のアプリケーションを対応させるとなった場合は、なるべく改修範囲を少なくして影響範囲を小さくしたい場合が多いかもしれません。そういった場合は、アプリケーションのフロントにリバースプロキシサーバをたててSSOを行うリバースプロキシ型のSSO方式が良いかもしれません。この場合、アプリケーションとしてはリクエストのHTTPヘッダで連携されるユーザID等で認証するように少し改修していただければ、SSOに対応できるようになります。

リバースプロキシ型のSSOを実現するにあたって、Keycloakが提供しているKeycloak Proxy以外にも、SAML2.0/OpenID Connectに対応したプロキシサーバがOSSでもいくつかあります。弊社でよく使用している代表的なものとして、Apache用のmod_auth_openidcがありますが、これまた @yagiaoskywalker が8日目に書いてくれますのでご期待ください!

アドベントカレンダー執筆予定メンバー

最後に、この25日間にアドベントカレンダーを書く(予定)のメンバーを紹介したいとおもいます。Qiita上、ハンドルネームのみで行きたいという方もいらっしゃいますのでここではハンドルネームベースで紹介します!

ハンドル名 自己紹介
@daian183 私、最近はKeycloakの社外関連の営業や内部メンバーのとりまとめ等
@wadahiro OpenStandiaが誇るテクニカルエバンジェリスト(全方位好き)
@tamura__246 OpenStandiaが誇るテクニカルエバンジェリスト(OpenAM好き)
@kabao OpenStandiaが誇るテクニカルエバンジェリスト(DB好き)
@mamomamo サポート、SI両面で活躍する若きリーダー
@izey0306 サポート、SI両面で活躍する若きメンバー
@yoonis SSO/IDMプロジェクト経験多数、Keycloak検証(弊社内)の主力メンバー
@naokiiiii SSO/IDMプロジェクト経験多数、Keycloak検証(弊社内)の主力リーダー
@rawr アプリから基盤に至るまで文句を言いながらもさくっとなんでもこなしちゃうすごい人
@katakura__pro OpenStandiaが実施するSI/サポート/維持管理、多岐に渡る業務をこなすリーダー
@masuo3 プロダクト問わずなんでもやれちゃうエンジニア、リーダー
@yagiaoskywalker OpenStandiaが誇るサポートの匠、SSO関連プロダクトから最近はIDM関連まで
@rkato OpenStandiaの札幌部隊、札幌から記事書いてもらいます

なお、今回、NRI OpenStandiaのメンバー中心に記事を書いていきますが、日立製作所様にも参加頂く事になりました!20日目前後に登場頂く予定ですのでご期待下さい。

それでは、25日間、宜しくお願いいたします!