Slide 1

Slide 1 text

KeycloakでSSOに入門する OSSセキュリティ技術の会 第10回勉強会 我が…Keycloakの世界に…入門してくるとは!の巻 Hiroyuki Wada / @wadahiro Wataru Okuura

Slide 2

Slide 2 text

自己紹介 奥浦担当 和田担当 和田担当

Slide 3

Slide 3 text

今日話すこと 入門編のこのあたりを中 心に解説 書籍のサンプルアプリ ケーションを使い実際に SSOの動作デモ

Slide 4

Slide 4 text

SSOとは 一度のログインで複数のアプリケーションやサービスに対してアクセス可能になる 特性や機能のこと

Slide 5

Slide 5 text

SSOのメリット ● 利用者側 ○ 1つのユーザIDとパスワードの組を覚えるだけで済む ○ 一度ログインするだけで複数のアプリケーションを利用可能になり、 アプリケーションごとにログインする手間がなくなる

Slide 6

Slide 6 text

SSOのメリット ● 管理者側 ○ パスワードの管理箇所、認証箇所を1箇所に集約でき、アタックサー フェス(攻撃対象領域)を少なくできる ○ 認証強度を上げる場合は、1箇所の認証強度を上げるだけで済む ○ アプリごとにパスワード忘れ対応といったヘルプデスク運用の負荷軽 減

Slide 7

Slide 7 text

SSOは新しいものではない ● Active Directoryドメイン内の認証などで使われるKerberosはかなり昔 からある ● KeycloakではWebに特化したSSOを実現

Slide 8

Slide 8 text

(Web) SSOの実現方法 シンプルなCookieベースのやり方/オレオレSSO(2000年代)

Slide 9

Slide 9 text

異なるドメイン間でのSSO 認証連携の標準プロトコル(SAML/OIDC)を活用したSSO

Slide 10

Slide 10 text

SSOの仕組み

Slide 11

Slide 11 text

何らかの方法で 認証結果をアプリケー ションに連携することで SSOを実現 安全な方法で認証結果をアプ リケーションに渡す標準的なや り方を定めたもの ⇓ 認証連携プロトコル (SAML/OIDC) 認証完了 認証結果 を連携 認証結果 を連携

Slide 12

Slide 12 text

SAMLの代表的なフロー(HTTP POST Binding) ● アプリケーション(SP:Service Provider) と認証サーバー(IdP:Idenitity Provider) 間は直接通信しない ● ブラウザー経由で認証結果を直接連携する ● 認証結果として「SAMLアサーション」をIdPから SPに渡す ● SPではSAMLアサーションを検証しつつ、含まれて いるユーザ識別子を利用してユーザを特定して SSOを行う

Slide 13

Slide 13 text

OIDCの代表的なフロー(認可コードフロー) ● アプリケーション(RP:Relying Party)と認証サーバー(OP:OpenID Provider)間は直接通信あり ● ブラウザーを経由せず、サーバー間通 信で認証結果を受け取る(引き換えの ための認可コードをブラウザー経由で 渡す) ● 認証結果として「IDトークン」をOPか らRPに渡す ● RPではIDトークンを検証しつつ、含ま れているユーザ識別子を利用してユー ザを特定してSSOを行う

Slide 14

Slide 14 text

SAMLとOIDC ● 認証リクエスト:SAMLリクエスト / OIDC認証リクエスト ● 認証結果:SAMLアサーション / IDトークン ● アプリケーション-認証サーバー間の直接通信あり・なしは、実は SAML・OIDCの双方で方式が用意されている ● ただし、紹介した代表的なフローがよく使われる (OIDCだと、アクセストークンを使ったAPI認可も同時に行いたいとなる と、認可コードフローがセキュリティ上望ましい)

Slide 15

Slide 15 text

Keycloak ● SAML/OIDCの両方に対応した認証サーバー (代表的ではないフローにも対応) ● Keycloak - アプリケーション間のSSOだけでなく、外部の認証サーバー とのSSO※についてもSAML/OIDCの両方に対応 ※Keycloakでは「アイデンティティーブローカリング」という機能

Slide 16

Slide 16 text

アプリケーションの SSO対応

Slide 17

Slide 17 text

アプリケーション側はどうする? ● 認証サーバー側:Keycloakにおまかせ! ● アプリケーション側:???

Slide 18

Slide 18 text

Keycloak入門本での解説 ● 代表的なアプリケーション側のSSOの実現方式につ いて解説 ● アプリケーションのタイプ別に、どの方式で実現 することができるか解説

Slide 19

Slide 19 text

ライブラリーを利用 ● アプリケーション内でOIDC/SAML対応のラ イブラリーを利用して実現する ● ライブラリーがOIDC/SAMLで必要なメッ セージの組み立て、アサーションの検証など を実施 ● ライブラリーを組み込み可能なアプリケー ションタイプの場合に利用可能なパターン

Slide 20

Slide 20 text

リバースプロキシーを利用 ● リバースプロキシーサーバーにて OIDC/SAMLによるSSOを実装 ● 後段のアプリケーションには、連携された 認証結果からユーザー識別子などをHTTP ヘッダーで連携する ● アプリケーションはHTTPヘッダーを参照し て認証するだけでよい ● AWS Application Load Balancerや Identity-Aware Proxy(IAP)のOIDC 機能もこのパターンとなる

Slide 21

Slide 21 text

まとめ ● SSOは認証結果を連携することで実現する ● 認証結果を連携するための標準プロトコルとして、SAML/OIDCがある ● KeycloakはSAML/OIDCを実装しており、認証サーバー側の機能を主に 提供(アプリケーション向けのライブラリも一部提供) ● SSOを行うアプリケーション側もSAML/OIDCに対応する必要があるが、 様々な方式があり、アプリケーションタイプに応じて考える必要がある