はじめに
keycloakを認証認可サーバとしてAPIの保護、SPAにログイン機能を付ける具体的な設定方法、
OIDC、OAuth2.0、認可コードフロー、トークンイントロスペクション、PKCEなどの図解
など自分が現場で得た認証認可に関するナレッジをまとめました。
自分はここ数年、keycloakを認証認可サーバとして設定する業務を現場でやっていました。
keycloakでAPIを保護したり、
keycloakでSPAのログイン機能を簡単に付与したり、
また、その中で
OIDC、OAuth2.0、認可コードフロー、トークンイントロスペクション、PKCE・・・
よくわからなかったこれらの概念を自分なりに絵にして理解したり、
などなどしてきました。
今回はここ数年で現場で学んだことしたことや、
脆弱性診断で指摘された話などなど、
認証と認可関連の内容をまとめ記事にしてみました。
keycloakとは??認証と認可の違い??OIDCとOAuth2.0の違い??
認証と認可の違いやkeycloakでできること
認証と認可の違いや、
そもそもkeycloakとは??
keycloakでできることと主なkeycloakのユースケースについて以下の記事にまとめました。
図解しているので認証と認可についてある程度全体像がイメージでき、
基礎的なところが理解できると思います!!
認証と認可 Keycloak入門第1章を読んでみて|気になったポイントと感想をまとめました
OAuth2.0とOIDCとの違い
OAuth2.0とOIDCとの違いを理解するために、
それぞれのプロトコルで登場する概念である
IDトークン、アクセストークンなどから以下の記事に図解でまとめました。
より認証と認可の内部の仕組みについて理解が深まると思います。
OAuthとOIDCの違い|それぞれで登場する概念とIDトークンとアクセストークンなど解説
OIDCとSAMLの違いとさまざまなSSOの実現方法
認証結果を連携するOIDCとSAMLとの仕組みの違いや、
アプリケーションがSaaS、モノシリックなアプリ、SPAやネイティブアプリ
それぞれの場合におけるSSO実現方法について以下の記事にまとめました。
SSOの仕組みをより細かく理解できると思います!!!
認証と認可 Keycloak入門第3章を読んでみて|OIDCとSAMLの違いとアプリケーションタイプ別SSO実装方式
Keycloakで登場する基本的な概念とセッション、IDトークン、アクセストークン、リフレッシュトークンの有効期限の関係について
Keycloakを導入する際に必要なKeycloak独自の基本的な概念についてと、
認証や認可の際のセッションやトークンの有効期限の関係について
以下の記事にまとめました。
Keycloakを認可サーバとして利用を検討している場合や
keycloakをりようしてSSOを実現するような場合、
まずはここを押さえておくのがおすすめです!!
セッション、アクセストークン、IDトークン、リフレッシュトークンの有効期限の関係|Keycloakの基本的な概念や設定
OAuth2.0やOIDCの認可コードフローの流れ
OAuth2.0やOIDCを理解するには、
まず認可コードフローの流れを理解する必要があります。
認可コードフローでIDトークンやアクセストークン発行まで
のながれについて以下の記事に図解してまとめています。
keycloakで認可|サンプルコードで動作確認しながら認可コードフロー図解
Keycloakを使ってAPIに認可機能、SPAにSSO機能をつけたサンプルコード
実際にkeycloakを利用したサンプルコードをいくつか作成したので紹介します。
Vue.jsで作成したSPAにkeycloakでSSO機能をつける
Vue.jsでSPAを作成し、KeycloakでIDとパスワードでログインが行われていなければ
アプリが使えないように認証機能を付けるサンプルを作りました。
KeycloakのSPAに対するSSOで認証連携の仕組みを利用したものになります。
具体的なSPAのサンプルコードやkeycloakの設定方法など
以下の記事にまとめているのでご覧ください。
OAuth2.0やOIDCの仕組みを理解する上で、
仕組みの基礎となっている認可コードフローについても
図解しています。
認可コードフローを図解|OAuth2.0(OIDC)の仕組みをSPAのSSO機能を例に解説
Spring Bootで作成したRestAPIをkeycloakで保護する
Spring Bootで作成したRestAPIに連携されたトークンを、
トークンイントロスペクションでKeycloakと連携して検証できるようにする
サンプルコードを作りました。
Spring Boot(Java)のサンプルコードとkeyloakの具体的な設定方法について
以下の記事にまとめているのでご覧ください。
spring boot(Java)で作成したREST APIをspring securityとkeycloakで保護する
Spring(Kotlin)でも書いてみたのでKotlinの方は
以下をご覧ください。
kotlinで書いたAPIをspring securityとkeycloakで保護した話!!IntelliJでkotlin(Spring Boot)で開発環境を構築〜API作成〜認証機能付加まで
Google APIを利用するためにアクセストークンを発行する
Google APIと連携するようなアプリを作成する際、
Googleの認可サーバのトークンエンドポイントを叩いて
アクセストークを発行する必要があります。
アクセストークンを発行する手順をまとめたので、
ご覧ください
Google OAuthでAccess Tokenを取得する|Google APIを利用するための準備編
まとめ
今回紹介した内容が、
僕が数年間現場で認証認可サーバの構築をやってきて得た知識のほぼ全てです。
(PKCEについて脆弱性診断で指摘されて直して自分で脆弱性診断やった話とか
もあるのですが・・・そのうち追記します)
今後もFAPIやCIBAなどなどサンプリング検証したり、
現場で導入を求められるケースがあると思うので、
その際に得た知識はここに随時追記していこうと思います
このまとめ記事がどこかの現場でお役に立てば幸いです。