Node.js 8系 + Express等のフレームワーク・ライブラリで構成されています。OAuthの主要プレイヤー3種類(クライアント、認可サーバー、保護対象リソース)はそれぞれ独立したサーバになっており、http://localhost:9000, http://localhost:9001, http://localhost:9002 で動作します。それぞれ単一のJavaScriptファイルであることが多いです。
書籍中では独立したターミナルで起動するのが良いとしています。実際、トラブルシューティングのためにはそのほうがよいです。単に一つのターミナルで一括起動する場合には例えば次のような感じでbashスクリプトで起動はできます
#!/bin/bash
(
trap "kill 0" SIGINT
# TCP 9000
(node client.js) &
# TCP 9001
(node authorizationServer.js) &
# TCP 9002
(node protectedResource.js) &
wait
)
最近のNode.js、例えば本稿執筆時点での12系では動作しません。原著が2017年発行、ソースコードのメンテナンスはあまりされていない印象です。
async/await
前提の現在のコードとは異なり、現在では非推奨のライブラリ(例えば sync-request
)や古いバージョンを使っています。
私自身JSまわりがあまり得意でない中で警備に修正をかけてみたのですが、サンプルコードとしては非本質的な対応を求められて、さらに何か「現代的には正しいけど読みづらい」コードになってしまうようでした。 async/await
が最たるものですが nosql
ライブラリを更新した際のインターフェース変更みたいなのも面倒そうでした(あまり調べてません)
一方、筆者のコードはProductionのコードとしては大NGなことを意図的にやっているところもあるため、JavaScriptの開発の参考になるわけでもありません。
よって、純粋にOAuthを勉強するのならNode.jsのバージョンは8に落として、ソースコードは動作する擬似コードくらいの認識でいるほうが良いようでした。
本格的にJS界隈でOAuthのコードを書くのなら書くで、本書のサンプルコードを見ずにフルスクラッチで書くようにした方が良いと思います(私の場合はPythonで書くことになるかな)
書籍の情報そのものは(もしかすると少し古いのかもしれませんが)OAuthの動作の仕様的・原理的側面の説明がしっかりされているのでオススメできるように思います。
一方、サンプルコードは(筆者も分かった上で)いまいち本番向けではないので、注意したほうが良いと思います。
「(筆者も分かった上で)」というのがまぁ大変そうで、実際アロー演算子やletなどを使わずに書いているのが印象的です。
# うーん……PythonであればPython3.5くらいをターゲットに構成すればこんなに変化はないと思うんですけどね……Node.jsの辛みを感じた気がしましたが気の所為?