認証と認可 Keycloak入門

- KeycloakはIAMのソフトウェア
- Red Hat社からはKeycloakの特定のバージョンをベースとした「Red Hat Single Sign-On」(Red Hat SSO)とともに商用サポートサービスが提供

- 他要素認証や権限管理もできる
- OIDC、SAMLに対応
- 基本はJavaだからアダプタとかもJavaなのかな?

- user storage federationによって外部のLDAPサーバと連携できる

- SAML連携するならIdentity Brokeringを使うことになりそう?

- Keycloakの設定情報は、JDBCを経由してDBに保持されるため、JDBCドライバーとPostgreSQLなどのDBも必要
- レルムとは、ユーザーが所属するドメインまたは代替ドメインのこと

アクセストークンの形式
- Handle型で、アクセストークンは意味を持たないランダムな文字列で表現。
アクセストークンに関連付いた情報は、認可サーバーで管理されており、アクセストークンは、その情報への参照を表す識別子となります。
- Assertion型で、アクセストークンは意味を持つ文字列で表現。
keycloakは2をサポート

確かにローカルでtokenの検証をしてたら、アクセストークンの無効化には検知できないよな

ID tokenからユーザ情報を取得するエンドポイントも規定されている

元々はCookieの連携だけでSSOを実装してたが、社内の認証基盤とクラウドサービスのSSOを実現するケースなどについては、Cookieだけでは認証済み状態を異なるドメインにあるアプリケーション間で共有することができない
異なるドメイン間でのSSOを実現するためには、Cookie以外のものでブラウザーを介して認証結果を安全にやりとりする、認証連携の方式が必要
→ SAML, OIDC

SAMLとOIDCでも名称の扱いが違うのか
認証結果をOIDCではIDトークン、SAMLではSAMLアサーション

SCIMとは
現時点(9/7)ではSCIM連携もできそう?

JITプロビジョニング
これだとユーザ作成後の更新や削除の同期ができない?

scimのpluginはありそうだけどエンプラ料金かかりそう

OIDCは、ソーシャルログインなどのコンシューマー分野で使われることが多い
SAMLは企業向けのSaaSアプリケーションとのSSOでよく使われており、エンタープライズ分野ではまだまだ必要

料金まわり

Keycloakを認証用のサービスとして公開し、複数の企業に利用してもらうようなケースでは、企業ごとにレルムを作成して、その中に社員データを参照するLDAPサーバーの設定をしたり、連携用のアプリケーション(クライアント)の情報を登録して、SSOを実現。

セッションの有効期限には2種類ある
- SSO Session Idle
- SSO Session Max
最初にセッションが生成されてから、SSO Session Maxの時間が経過すると、セッションが無効になり、関連するトークンもすべて無効になる

認可コードの有効期間は、最大でも10分以内が推奨。
アクセストークンに関しては、漏洩したときの影響を軽減するために、有効期間を1時間以内の値に設定。