32
2014-12-13(土) 第九回 #渋谷java 1 Keycloak SSO 田邊 義真(たなべ よしまさ) @emaggame http://morec.at

Keycloak で SSO #渋谷java

Embed Size (px)

Citation preview

Page 1: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 1

Keycloak で SSO

田邊 義真(たなべ よしまさ)

@emaggame

http://morec.at

Page 2: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 2

アジェンダ

● SSOの悩み● Keycloakとは● Keycloak導入● Keycloakデモ● Keycloakの個人的に思ういいところ● 本日のまとめ

Page 3: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 3

SSOの悩み

● 仕組み作りが難しい– 統一インターフェースを用意し、関連するアプリケーションすべてが利用する必要がある。既存のアプリケーションはユーザ情報の DB 変更発生

– SSLクライアント証明書はユーザに導入する敷居が高い(社内システムであれば一番有効?)

● APサーバ固有機能も利用できるが、SSO認証が利用できるアプリケーションは同一ホスト内にデプロイされたもののみ、といったような制限がネック

Page 4: Keycloak で SSO #渋谷java

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のリードでもある

Page 5: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 5

Keycloak導入(サーバ)

● Keycloakサーバ– 管理コンソールのデプロイ

● WildFly 8, JBoss AS 7.1.1, JBoss EAP 6.x– 今後Tomcat, Jettyにもデプロイ可能になる予定

● セッション情報を管理– SSOを利用するアプリケーションはKeycloakサーバの提供するログインページにリダイレクトされる

Page 6: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 6

Keycloak導入(クライアント)

● 設定ファイルの用意– keycloak.json

{  "realm": "demo",  "realm­public­key": "MIGfMA...",  "auth­server­url": "https://keycloak­server/auth",  "ssl­required": "external",  "resource": "customer­portal",  "credentials": {    "secret": "ea16..."  }}

Page 7: Keycloak で SSO #渋谷java

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に以下を設定

    <login­config>        <auth­method>KEYCLOAK</auth­method>        <realm­name>demo</realm­name>    </login­config>

Page 8: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 8

Keycloak導入(クライアント)

● スタンドアロンJavaアプリケーション– 設定ファイル(META-INF/keycloak.json)の配置– Keycloakが用意しているAPIだけでログイン可

● KeycloakInstalled#login– GUI環境の有無も判断し、以下のいずれかが選ばれる。直接呼び出すのもOK

● GUI環境有: ブラウザでログイン(loginDesktop)● GUI環境無: マニュアルログイン(loginManual)

Page 9: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 9

Keycloak導入(クライアント)

● クライアントサイドJavaScript– 設定ファイル(keycloak.json)の配置– APIはKeycloakサーバから取得

<script src="https://keycloak­server/auth/js/keycloak.js"></script>

Page 10: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 10

Keycloak導入(クライアント)

● Node.js, RoR, Grails– 今後サポート予定

Page 11: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 11

Keycloakデモ

1. Keycloakで用意しているサンプル– Realm,ユーザ,ロールなどを一括で設定済み– 手順などは拙ブログでも紹介しています

● http://morec.at/blog/2014/11/24/getting-started-with-keycloak

2. Social Login– Twitter

Page 12: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 12

Keycloakデモ

Page 13: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 13

Keycloakデモ

Page 14: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 14

Keycloakデモ

demo というRealm を設定

Page 15: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 15

Keycloakデモ

4人のユーザ

Page 16: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 16

Keycloakデモ

demo Realm にたくさんのアプリケーションを登録

Page 17: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 17

Keycloak導入(クライアント)

customer-portal アプリケーション。Customer Listing はログインが必要なリソース

Page 18: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 18

Keycloak導入(クライアント)

Customer Listing にアクセスしようとすると、Keycloak が用意しているログインにリダイレクト

Page 19: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 19

Keycloakデモ

Keycloakでのログインを経由してProduct Listing リソースにアクセスできるようになった

Page 20: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 20

Keycloakデモ

管理コンソールからもcustomer-portal にセッションが1つできていることを確認できる

Page 21: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 21

Keycloakデモ

誰がログインしているかもわかる

Page 22: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 22

Keycloakデモ

demo Realm に属する別のアプリケーションである Product Portal にアクセス。Product Listing はログインが必要なリソース

Page 23: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 23

Keycloakデモ

ログインなしにアクセスできた!

Page 24: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 24

Keycloakデモ

product-portal にもセッションが生成されたことを確認できるproduct-portal にもセッションが生成されたことを確認できるproduct-portal にもセッションが生成されたことを確認できる

Page 25: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 25

Keycloakデモ(Social Login)

Social login を有効にし、

Page 26: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 26

Keycloakデモ(Social Login)

... ...

TwitterのAPI KeyとAPI Secretを入力するだけで...TwitterのAPI KeyとAPI Secretを入力するだけで...TwitterのAPI KeyとAPI Secretを入力するだけで...

Page 27: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 27

Keycloakデモ(Social Login)

Twitterでログインボタンが出現

Page 28: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 28

Keycloakデモ(Social Login)

Twitterでログインできた!

Page 29: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 29

Keycloakデモ(Social Login)

ユーザも増えてる

Page 30: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 30

Keycloakの個人的に思ういいところ

● 導入が簡単!– まずはと自作ブログに導入してみました– 小さなアプリなので、少しのDB変更(ユーザーエンティティ)とそれを参照するものぐらいの修正ですみました

● 管理APIが豊富なため、管理コンソールが気に入らなければ気軽に自作できる– http://docs.jboss.org/keycloak/docs/1.1.0.Beta2/rest-api/overview-index.html

Page 31: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 31

本日のまとめ

● SSOの仕組みづくりは大変● Keycloakを利用することで、少なくとも統一した認証のインターフェースを用意できる

● Keycloakは– Javaユーザにとって導入の敷居が低い。たぶん...– 現状すでにひととおりの機能を揃えている

Page 32: Keycloak で SSO #渋谷java

2014-12-13(土) 第九回 #渋谷java 32

参考

● Keycloakサイト– http://keycloak.jboss.org/

● ドキュメント– http://keycloak.jboss.org/docs