PostgRESTはPostgreSQLでデータベースを作成すると、自動でREST APIを生成してくれるOSSツールです。
公式チュートリアルをフォローすることで、最低限の使い方が理解できます。
その大まかな流れと分かりづらい点についてまとめました。
大まかな手順
- まず、PostgreSQLでスキーマを作る。
- 次にロール(
todo_user
)を作成して適当な権限を付与。 - さらに、authenticatorロールを作成してこれに権限付与する。
-
.conf
ファイルを引数に指定して、postgrestコマンドを実行。
ユーザー認証の詳細
authenticatorユーザーをパスワード付で作成
create role authenticator noinherit login password 'mysecretpassword';
PostgRESTにアクセスするロールをnologin
で作成し、authenticatorロールに権限付与
create role todo_user nologin;
grant todo_user to authenticator;
そのロールにスキーマ、テーブル等の権限を付与。なお、authenticatorユーザーのロール名は任意で、.confファイルのdb-uriで指定できる。
{"role": ロール名}
の情報を入れてJWTトークンを発行することで(jwt.ioなどで可能)、Authorization
ヘッダーに設定して認証可能になる。その際、JWTトークン発行に使った秘密鍵は.conf
ファイルにjwt-secret
として設定。
export TOKEN="<paste token here>"
curl http://localhost:3000/todos -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"task": "learn how to auth"}'
これにより、裏ではauthenticatorロールがSET ROLEを使って、指定されたロールへ成り代わって操作を実行するので、todo_user
でログインしなくてもDB操作が可能になっている。
上記のユーザーロールの他、認証なしでのAPIアクセスを担うロールとしてanonymousロールが使える。ロール名は任意で、.confファイルのdb-anon-roleで指定可能。anonymousロールもnologinで作成し、authenticatorへ権限付与を行う。