Keycloak で SSO 
田邊 義真(たなべ よしまさ) 
@emaggame 
http://morec.at 
2014-12-13(土) 第九回 #渋谷java 1
2014-12-13(土) 第九回 #渋谷java 2 
アジェンダ 
● SSOの悩み 
● Keycloakとは 
● Keycloak導入 
● Keycloakデモ 
● Keycloakの個人的に思ういいところ 
● 本日のまとめ
2014-12-13(土) 第九回 #渋谷java 3 
SSOの悩み 
● 仕組み作りが難しい 
– 統一インターフェースを用意し、関連するアプリ 
ケーションすべてが利用する必要がある。既存のア 
プリケーションはユーザ情報の DB 変更発生 
– SSLクライアント証明書はユーザに導入する敷居が 
高い(社内システムであれば一番有効?) 
● APサーバ固有機能も利用できるが、SSO認証 
が利用できるアプリケーションは同一ホスト内 
にデプロイされたもののみ、といったような制 
限がネック
Keycloakとは 
● SSO認証フレームワーク+管理コンソール 
– http://keycloak.jboss.org 
– Javaで実装 
● OAuth 2.0, Open ID Connect, etc... 
● 豊富な管理 RESTful API 
● Social login(Twitter, Google, etc...) 
● スペックリードはBill Burke氏 
– RESTEasyのリードでもある 
2014-12-13(土) 第九回 #渋谷java 4
Keycloak導入(サーバ) 
● Keycloakサーバ 
– 管理コンソールのデプロイ 
● WildFly 8, JBoss AS 7.1.1, JBoss EAP 6.x 
– 今後Tomcat, Jettyにもデプロイ可能になる予定 
● セッション情報を管理 
– SSOを利用するアプリケーションはKeycloakサー 
バの提供するログインページにリダイレクトされる 
2014-12-13(土) 第九回 #渋谷java 5
Keycloak導入(クライアント) 
● 設定ファイルの用意 
– keycloak.json 
2014-12-13(土) 第九回 #渋谷java 6 
{ 
"realm": "demo", 
"realm­public­key": 
"MIGfMA...", 
"auth­server­url": 
"https://keycloak­server/ 
auth", 
"ssl­required": 
"external", 
"resource": "customer­portal", 
"credentials": { 
"secret": "ea16..." 
} 
}
Keycloak導入(クライアント) 
● warアプリケーション 
– 設定ファイル(WEB-INF/keycloak.json)の配置 
– デプロイ先のAPサーバにアダプタをインストール 
● JBoss AS7, WildFly 8, Tomcat 6-8, Jetty 8-9 利用可 
– Servletと統合。web.xmlに以下を設定 
2014-12-13(土) 第九回 #渋谷java 7 
<login­config> 
<auth­method> 
KEYCLOAK</auth­method> 
<realm­name> 
demo</realm­name> 
</login­config>
Keycloak導入(クライアント) 
● スタンドアロンJavaアプリケーション 
– 設定ファイル(META-INF/keycloak.json)の配置 
– Keycloakが用意しているAPIだけでログイン可 
● KeycloakInstalled#login 
– GUI環境の有無も判断し、以下のいずれかが選ばれる。直接呼 
び出すのもOK 
● GUI環境有: ブラウザでログイン(loginDesktop) 
● GUI環境無: マニュアルログイン(loginManual) 
2014-12-13(土) 第九回 #渋谷java 8
Keycloak導入(クライアント) 
● クライアントサイドJavaScript 
– 設定ファイル(keycloak.json)の配置 
– APIはKeycloakサーバから取得 
<script src="https://keycloak­server/ 
auth/js/keycloak.js"></script> 
2014-12-13(土) 第九回 #渋谷java 9
Keycloak導入(クライアント) 
● Node.js, RoR, Grails 
– 今後サポート予定 
2014-12-13(土) 第九回 #渋谷java 10
Keycloakデモ 
1. Keycloakで用意しているサンプル 
– Realm,ユーザ,ロールなどを一括で設定済み 
– 手順などは拙ブログでも紹介しています 
● http://morec.at/blog/2014/11/24/getting-started-wit 
h-keycloak 
2. Social Login 
2014-12-13(土) 第九回 #渋谷java 11 
– Twitter
Keycloakデモ 
2014-12-13(土) 第九回 #渋谷java 12
Keycloakデモ 
2014-12-13(土) 第九回 #渋谷java 13
Keycloakデモ 
demo というRealm を設定 
2014-12-13(土) 第九回 #渋谷java 14
Keycloakデモ 
4人のユーザ 
2014-12-13(土) 第九回 #渋谷java 15
Keycloakデモ 
demo Realm にたくさんのアプリケーションを登録 
2014-12-13(土) 第九回 #渋谷java 16
Keycloak導入(クライアント) 
customer-portal アプリケーション。 
Customer Listing はログインが必要なリソース 
2014-12-13(土) 第九回 #渋谷java 17
Keycloak導入(クライアント) 
Customer Listing にアクセスしようとすると、 
Keycloak が用意しているログインにリダイレクト 
2014-12-13(土) 第九回 #渋谷java 18
Keycloakデモ 
Keycloakでのログインを経由して 
Product Listing リソースにアクセスできるようになった 
2014-12-13(土) 第九回 #渋谷java 19
Keycloakデモ 
管理コンソールからもcustomer-portal にセッ 
ションが1つできていることを確認できる 
2014-12-13(土) 第九回 #渋谷java 20
Keycloakデモ 
誰がログインしているかもわかる 
2014-12-13(土) 第九回 #渋谷java 21
Keycloakデモ 
demo Realm に属する別のアプリケーションである Product Portal にアクセス。 
Product Listing はログインが必要なリソース 
2014-12-13(土) 第九回 #渋谷java 22
Keycloakデモ 
ログインなしにアクセスできた! 
2014-12-13(土) 第九回 #渋谷java 23
Keycloakデモ 
ppprrroooddduuucccttt---pppooorrrtttaaalll にもセッションが生成されたことを確認できる
2014-12-13(土) 第九回 #渋谷java 24
Keycloakデモ(Social Login) 
Social login を有効にし、 
2014-12-13(土) 第九回 #渋谷java 25
Keycloakデモ(Social Login) 
... ... 
TwitterのAPI TTwwiitttteerrAAPPII KKKeeeyyyとAAAPPPIII SSSeeecccrrreeetttを入力するだけで......... 
2014-12-13(土) 第九回 #渋谷java 26
Keycloakデモ(Social Login) 
Twitterでログインボタンが出現 
2014-12-13(土) 第九回 #渋谷java 27
Keycloakデモ(Social Login) 
Twitterでログインできた! 
2014-12-13(土) 第九回 #渋谷java 28
Keycloakデモ(Social Login) 
ユーザも増えてる 
2014-12-13(土) 第九回 #渋谷java 29
Keycloakの個人的に思ういいところ 
2014-12-13(土) 第九回 #渋谷java 30 
● 導入が簡単! 
– まずはと自作ブログに導入してみました 
– 小さなアプリなので、少しのDB変更(ユーザーエン 
ティティ)とそれを参照するものぐらいの修正です 
みました 
● 管理APIが豊富なため、管理コンソールが気に 
入らなければ気軽に自作できる 
– http://docs.jboss.org/keycloak/docs/1.1.0.Beta2 
/rest-api/overview-index.html
本日のまとめ 
● SSOの仕組みづくりは大変 
● Keycloakを利用することで、少なくとも統一 
した認証のインターフェースを用意できる 
2014-12-13(土) 第九回 #渋谷java 31 
● Keycloakは 
– Javaユーザにとって導入の敷居が低い。たぶん... 
– 現状すでにひととおりの機能を揃えている
2014-12-13(土) 第九回 #渋谷java 32 
参考 
● Keycloakサイト 
– http://keycloak.jboss.org/ 
● ドキュメント 
– http://keycloak.jboss.org/docs

Keycloak で SSO #渋谷java