Web API の認証をKeycloakで行いたい場合の設定と構成の話。
クライアントサイドの JavaScript アプリケーションがリソースをバックエンドの Web API から取得するような、今時の Web アプリケーションを想定している。
Keycloak と連携したアプリケーションで、OpenID Connect で認証したアプリケーションから Web API に対して Access Token を使って認証する場合、以下の 2 つの SSO Client の準備が必要。
- Access Type を
public
に設定した SSO Client - Access Type を
bearer-only
に設定した SSO Client
Web API のような アクセストークンだけで認証チェックを行いたいアプリケーションの場合、Access Type を bearer-only
に設定した Client と連携したアプリケーションを用意する必要があるが、 bearer-only
のクライアントはログイン(アクセストークン発行)を行うことができない。
なので、Web API とは別のクライアントアプリケーションを用意してそちらでログインを行なった後、そこで取得したアクセストークンを Authorization: Bearer
ヘッダに渡して HTTP Request を投げる必要がある。
認証には Keycloak が用意しているアダプタを使う。
Public client(ブラウザアプリ)にはJavaScript Adapter、Bearer-only のクライアント(Web API)には、例えば Node.js の場合はkeycloak-nodejs-connectが用意されてるが、keycloak-nodejs-connect を Bearer-only の client で使う際にはちょっと注意が必要なんだけど、それはまた別の記事で書く。