Postman で認証が必要なMTのエンドポイントをまとめて認証する #movabletype
普段、APIの動作確認をするときとかに Postman をよく使う。
Postman API Platform
https://www.postman.com/
MTAppjQuery の問い合わせで DataAPI の確認したり、 Craft CMS の GraphQL の確認したり。
他のサービスの API 叩いてみたりするときに使っている。
DataAPI の認証をまとめてやる
MT の DataAPI を使う場合は認証が必要なエンドポイントとかがあって、そういうときは Authentication のエンドポイントで認証して、受け取った accessToken をつかってあれこれ処理をする
Movable Type Data API v6
https://movabletype.github.io/mt-docs-data-api-reference/v6.html#tag/Authentication/paths/~1authentication/post
Collection の設定の中に「認証情報」「変数」の設定をするのとは別に、「Scripts」のところで 「Pre-request」「Post-response」の設定があった。
この Pre-request の設定をしておけば Collection 配下のリクエストとかで認証情報を使ってやれるような気がしたので試してみた。

最初少し試してみたけど、 ChatGPT に聞いた方が早そうだったので聞いてみた。

ChatGPT が教えてくれたコードがこんな感じ
pm.sendRequest({
url: pm.environment.get("base_url") + '/v4/authentication',
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: {
mode: 'urlencoded',
urlencoded: [
{key: "username", value: pm.environment.get("username"), type: "text"},
{key: "password", value: pm.environment.get("password"), type: "text"},
{key: "__mode", value: "authenticate", type: "text"}
]
}
}, function (err, res) {
if (err) {
console.log(err);
} else {
var authToken = res.json().accessToken;
pm.environment.set("authToken", authToken);
console.log('Authentication token saved: ', authToken);
}
});
変数の設定・取得が environment を使う形になっていたのだけど、変数の設定は Collection の方でやっていたので書き換える
url: pm.environment.get("base_url") + '/v4/authentication',
↓↓↓
url: pm.collectionVariables.get("base_url") + '/v6/authentication',
ついでに v6 にしておく。
Postman の変数関係
Store and reuse values using variables | Postman Learning Center
https://learning.postman.com/docs/sending-requests/variables/variables/
あとは ClientID を渡しておく
body: {
mode: 'urlencoded',
urlencoded: [
{key: "username", value: pm.environment.get("username"), type: "text"},
{key: "password", value: pm.environment.get("password"), type: "text"},
{key: "__mode", value: "authenticate", type: "text"}
]
}
↓↓↓
body: {
mode: 'urlencoded',
urlencoded: [
{key: "username", value: pm.collectionVariables.get("username"), type: "text"},
{key: "password", value: pm.collectionVariables.get("password"), type: "text"},
{key: "clientId", value: pm.collectionVariables.get("clientId"), type: "text"}
]
}
===
pm.environment.set("authToken", authToken);
↓↓↓
pm.collectionVariables.set("authToken", authToken);
__mode は要らなかった。
これで例えば認証が必要なエンドポイントを叩く時に「Headers」に accessToken を渡しておく。

X-MT-Authorization : MTAuth accessToken={{authToken}}
これでテンプレートの情報とかを取得出来た。
ChatGPT は「Authorization」タブのタイプ「Bearer Token」に保存すると教えてくれたのだけど、「Authorization」タブで保存するならタイプは「API Key」に保存するような気がする。

とりあえず API Key に保存する形で問題無かった。
Collections 単位で認証する
この「Authorization」自体も Collection の方で済ませてしまえば、配下のものは認証も通過して使う事ができた。

Request の方の「Authorization」の設定

Request の方の「Headers」の設定は無効状態

Collection の方で設定してるから毎回認証が走りそう。
その辺は Token が有効かどうかとかで判断するとか入れてもいいのかも知れない。
普通にエディタとかでやる方がいい人はにっくさんや高橋さんの記事が参考になりそう
- Movable Type の Data API でユーザー認証を行う #JavaScript - Qiita
https://qiita.com/TakeshiNickOsanai/items/5508b2df13be72bf4503 - Movable Type 7のData APIをJavaScriptのみで実装する #JavaScript - Qiita
https://qiita.com/TakahashiMasaya/items/c30cbcf264f3186e0d28