Keycloak JavaScript Adapter

オライリーの書籍「実践Keycloak」にあるJavaScriptアダプターについて試してみました。

環境)
Keycloak v21/Ubuntu 22.04 / 192.168.1.172
Keycloak v15, node.js App/Ubuntu 20.04 / 192.168.1.148
(これまで使ってきたもの。二つのバージョンで動作確認)

「7.6 JavaScriptアプリケーションとの統合」のJavaScriptコード取得

git clone https://github.com/PacktPublishing/Keycloak-Identity-and-Access-Management-for-Modern-Applications.git

node.js App インストールと実行

n@n07:~/Keycloak-Identity-and-Access-Management-for-Modern-Applications/ch7/keycloak-js-adapter$ sudo apt install npm

n@n07:~/Keycloak-Identity-and-Access-Management-for-Modern-Applications/ch7/keycloak-js-adapter$ npm install
npm WARN deprecated start@5.1.0: Deprecated in favor of https://github.com/deepsweet/start
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN keycloak-js-app@0.0.1 No description
npm WARN keycloak-js-app@0.0.1 No repository field.
npm WARN keycloak-js-app@0.0.1 No license field.

added 61 packages from 47 contributors and audited 61 packages in 2.329s

8 packages are looking for funding
run npm fund for details

found 0 vulnerabilities

n@n07:~/Keycloak-Identity-and-Access-Management-for-Modern-Applications/ch7/keycloak-js-adapter$ npm start

> keycloak-js-app@0.0.1 start /home/n/Keycloak-Identity-and-Access-Management-for-Modern-Applications/ch7/keycloak-js-adapter
> node app.js

app.js

※v21は、KC_URLをhttp://192.168.1.148:8080 に
(コメントは、オリジン間リソース共有 (Cross-Origin Resource Sharing, CORS) のエラーがでたときに追加。しかしNG。Keycloakの設定で解決できることがわかる。一応残しておく)

index.html

※v21は、KC_URL/auth を KC_URL に

n@n07:~/Keycloak-Identity-and-Access-Management-for-Modern-Applications/ch7/keycloak-js-adapter$ cat keycloak.json

※v21は、http://192.168.1.148:8080/auth/ を http://192.168.1.172:8080/ に

設定メモ)最初Confidential Clientの設定で、動かしたところtokenの取得でclient_secretがないというエラー。考えてみれはシークレットキーをkeycloak.json(管理画面(install)からDownload)に置くことはセキュリティ上ないのかもと思い、publicにする。keycloak.jsonから設定を読むときは、new Keycloak()を使用。またPKCEは無効にする。

v15設定

v21設定

ログイン

v15

v21

当然どちらも同じ画面ですが、v21はstep2.htmlをスキップしました。

情報の表示

これだけの機能を、JavaScriptライブラリとして提供されていることを便利に感じました。(SPAに簡単に導入できる)

最後に、step2.htmlをスキップしている部分の確認と、ブラウザで確認できなかったtokenの取得部分をパケットキャプチャを残しておきます。