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