【認証攻略】InsomniaでOAuth2.0やJWTの認証を通す設定手順を徹底解説
テックリードの私たちが新しいプロジェクトに参入したとき、最も開発スピードを鈍らせる要因は何だと思うか?
アーキテクチャの複雑さ? それともレガシーなコードベース? ――いや、違う。「APIの認証・認可フローのローカル再現」である。
「OAuth2.0の認可コードフローでリダイレクトループする」「JWTの有効期限(`exp`)が切れるたびに、わざわざ別タブでログインしてトークンを手動でコピペしている」……このような不毛な作業に、チームのエンジニアの大切な時間を奪わせてはならない。
今回は、APIクライアントとしてPostman以上の俊敏性を持ち、宣言的なワークスペース管理が可能なInsomniaを使い、OAuth2.0とJWTの認証地獄を完全にハックする方法を伝授する。
単なる「ボタンの押し方」ではない。プロの現場で即座にROI(投資対効果)を生む、実践的な設定構築の全貌を見ていこう。
—
1. 開発スピードを3倍にする Insomnia 隠しショートカット
認証デバッグを極める前に、Insomniaの操作スピードを物理の限界まで引き上げる。マウスに手を伸ばした時点で負けだ。以下のキーボードショートカットを脳に焼き付けろ。
| ショートカット (Mac / Win) | アクション | テックリード的活用法 |
| :— | :— | :— |
| `Ctrl + Space` / `Ctrl + Space` | IntelliSense (変数・タグ補完) | リクエストヘッダーやボディで環境変数を呼び出す際、迷わずこれを叩け。 |
| `Cmd + K` / `Ctrl + K` | クイック検索(Go to Anything) | 巨大化したワークスペースから、目的のエンドポイントへ0.5秒でジャンプする。 |
| `Cmd + T` / `Ctrl + T` | 新規リクエストタブの作成 | 思考を止めずに新しい検証用リクエストを生み出す。 |
| `Cmd + Shift + L` / `Ctrl + Shift + L` | 環境(Environment)の素早い切り替え | `Local` と `Staging` のコンテキストを瞬時にスイッチする。 |
—
2. 絶対に入れるべき「神プラグイン」
Insomniaはそのままでも優秀だが、コミュニティ製のプラグインを入れることで「真の姿」を現す。設定画面(Preferences > Plugins)から、以下のプラグインを即座にインストールしろ。
① `insomnia-plugin-jwt-decoder`
- 何をするものか: リクエスト/レスポンスに含まれるJWTを自動でパッチし、ペイロード(Claims)を人間が読める形で可視化・デバッグする。
- なぜ神なのか: トークンの中身(`sub`, `aud`, `exp`, ロール等)が正しいかを、外部の jwt.io に貼り付けることなく、Insomniaの画面内で完結できる。セキュリティポリシーが厳しい企業では必須。
—
3. チーム開発の生産性を爆上げする設計共有ルール
「ローカル環境で動いたのに、Stagingで死ぬ」というバグの8割は、環境変数や認証設定の共有ミスに起因する。Insomniaでは、構成をすべてJSON(Insomnia Export V4フォーマット)でGit管理する。
チーム共有の鉄則
1. 機密情報(Client Secretなど)は絶対に直書きしない。 必ず環境変数(Environment)のプライベートスコープ、あるいは後述の`.insomnia`ディレクトリの仕組みを利用する。
2. Base EnvironmentとSub Environmentを分離する。
- Base: すべての環境共通のエンドポイントベースURLなど。
- Sub (Local / Staging): 各環境固有のクライアントIDやトークン取得エンドポイント。
—
4. 実戦投入!OAuth2.0 アクセストークン取得完全自動化
OAuth2.0の「Authorization Code Grant + PKCE」や「Client Credentials」を、毎回ブラウザを開いて手動で認可コードをもらって……などという前時代的なやり方は今日で卒業だ。Insomniaにすべてを代行させよう。
ステップ1: 環境変数の定義
まずは、認証に必要なパラメータを環境変数にセットする。
{
“base_url”: “https://api.internal.local”,
“auth_issuer”: “https://auth.internal.local/oauth/v2”,
“client_id”: “my-client-app”,
“client_secret”: “super-secret-key-do-not-commit”,
“audience”: “https://api.internal.local/v1”
}
ステップ2: Authタブの設定
保護されたエンドポイント(例: `GET /v1/users/me`)を開き、Authタブから OAuth 2.0 を選択する。
各フィールドには、先ほど定義した環境変数を `Ctrl + Space` で埋め込んでいく。
- Grant Type: `Authorization Code` (または `Client Credentials`)
- Authorization URL: `{{ _.auth_issuer }}/authorize`
- Access Token URL: `{{ _.auth_issuer }}/token`
- Client ID: `{{ _.client_id }}`
- Client Secret: `{{ _.client_secret }}`
- Audience: `{{ _.audience }}`
- Scope: `openid profile email`
- Authenticate with Client Credentials: `Send as Basic Auth header` (多くのOIDC準拠サーバーで必須)
ステップ3: ワンクリック認可
設定が完了したら、最下部にある 「Fetch Tokens」 ボタンを押す。
Insomnia内部のブラウザが立ち上がり(あるいは外部ブラウザ経由でコールバックし)、認証サーバーでのログインを経て、自動的にアクセストークンがInsomniaのメモリにキャッシュされる。
これで、このリクエストを送るたびに最新の有効なアクセストークンが `Authorization: Bearer
—
5. JWTをヘッダーに自動付与する設定とNunjucksの活用
「OAuth2.0のフルフローマージンを取るほどではないが、他のリクエストから動的に取得したJWTやカスタムトークンを使い回したい」というケースもあるだろう。
ここでInsomniaの隠し武器であるNunjucksテンプレートエンジンの機能が火を吹く。
応用テクニック: レスポンスからJWTを自動抽出し、環境変数にバインドする
1. 認証API(`/v1/login`)のリクエストを作成し、実行する。
2. 対象リクエストの After-response スクリプト(またはResponseタグ機能)を使い、レスポンスボディのJSONから `$.access_token` を抽出する。
3. あるいは、もっと手軽にNunjucksタグを使う:
- ヘッダーや他のリクエストのパラメータに、以下のタグを埋め込む。
- `{% response ‘body’, ‘req_xxxxxx’, ‘$.access_token’, ‘0’ %}`
(※ `req_xxxxxx` はログインリクエストのID)
これによって、「ログインリクエストを叩く $\rightarrow$ トークンが自動で変数に格納される $\rightarrow$ 後続の全APIリクエストがそのトークンを自動で参照する」という、完全無欠の自動化パイプラインが完成する。
—
6. ベストプラクティス:インポート用設定ファイル構成例
チーム全員で即座にインポートして使い始められる、堅牢なInsomnia用ワークスペース構成(Export JSONのスケルトン)を提示する。これをベースにリポジトリの `docs/api/` あたりに配置し、CI/CDやチームオンボーディングに組み込んでほしい。
{
“_type”: “export”,
“__export_format”: 4,
“__export_date”: “202X-XX-XXT00:00:00.000Z”,
“__export_source”: “insomnia.desktop.app:v202X.X.X”,
“resources”: [
{
“_id”: “wrk_workspace_root”,
“parentId”: null,
“modified”: 1700000000000,
“created”: 1700000000000,
“name”: “Enterprise Core API”,
“description”: “プロダクション標準認証フロー完備ワークスペース”,
“_type”: “workspace”
},
{
“_id”: “env_base_environment”,
“parentId”: “wrk_workspace_root”,
“modified”: 1700000000000,
“created”: 1700000000000,
“name”: “Base Environment”,
“data”: {
“api_version”: “v1”,
“oauth_grant_type”: “authorization_code”
},
“dataPropertyOrder”: {
“&”: [
“api_version”,
“oauth_grant_type”
]
},
“color”: null,
“isPrivate”: false,
“_type”: “environment”
},
{
“_id”: “env_local_development”,
“parentId”: “env_base_environment”,
“modified”: 1700000000000,
“created”: 1700000000000,
“name”: “Local Development”,
“data”: {
“base_url”: “http://localhost:8080”,
“auth_issuer”: “http://localhost:8081/realms/master”,
“client_id”: “local-api-client”,
“client_secret”: “secret-placeholder-change-me”
},
“dataPropertyOrder”: {
“&”: [
“base_url”,
“auth_issuer”,
“client_id”,
“client_secret”
]
},
“color”: “#7dcea0”,
“isPrivate”: true,
“_type”: “environment”
},
{
“_id”: “req_protected_resource”,
“parentId”: “wrk_workspace_root”,
“modified”: 1700000000000,
“created”: 1700000000000,
“url”: “{{ _.base_url }}/{{ _.api_version }}/users/me”,
“name”: “Get Current User Profile”,
“description”: “OAuth2.0認証が必須なサンプルエンドポイント”,
“method”: “GET”,
“body”: {},
“parameters”: [],
“headers”: [],
“authentication”: {
“type”: “oauth2”,
“grantType”: “authorization”,
“authorizationUrl”: “{{ _.auth_issuer }}/protocol/openid-auth/auth”,
“accessTokenUrl”: “{{ _.auth_issuer }}/protocol/openid-auth/token”,
“clientId”: “{{ _.client_id }}”,
“clientSecret”: “{{ _.client_secret }}”,
“scope”: “openid profile email”,
“credentialsInBody”: false
},
“metaSortKey”: -1700000000000,
“isPrivate”: false,
“_type”: “request”
}
]
}
—
テックリードからの総括
認証設定を「面倒な儀式」として放置するチームは、スケールした瞬間に崩壊する。新人がアサインされた初日に「このJSONをInsomniaにインポートして、ローカルのKeycloak/Auth0と繋ぎなさい。5分で終わるはずだ」と言い放てる環境を作るのが、私たちエンジニアリングリーダーの責務だ。
Insomniaのポテンシャルは、単なるAPIのリクエスト送信ツールに留まらない。適切に環境変数、OAuth2プロバイダ連携、Nunjucksを組み合わせることで、「認証に怯えなくてよい開発体験」という最強のインフラを手に入れることができる。
今すぐ君のワークスペースを開き、手動コピペの呪縛を断ち切れ。