BETA

Azure API Management で Firebase のJWT を Validation

投稿日:2019-12-22
最終更新:2019-12-22

以前noteに書いた記事を微修正した内容です

AzureどころかHTTP?クラウド?もはてなマークいっぱいのおっさんです。

最近Azure Functionsを試してみました。VSのテンプレをビルド&デプロイしただけでもう天才ハッカーになれた気分です。さてこのFunctionsは、Azure API Management(以下APIM)というサービスと連携させることでさらに便利になるらしいです。らしいというのは実務でまったく使ったことがなく…

さてWEB APIを運用するうえで、認可/認証の仕組みは将来的にきっと必要になるはずです。APIMのドキュメントを読んでいたところ、JWTを利用する機能が標準で用意されているようなので、これでFirebaseのAuthenticationと連携できるのでは?と思い立ちトライしてみました。(Firebaseは無料で簡単に使えるので、無知のおっさんでも使いこなしている気分にさせてくれます)

APIMのJWTに関する記事は以下のリンクから参照できます。
https://docs.microsoft.com/ja-jp/azure/api-management/api-management-access-restriction-policies#ValidateJWT

FunctionsもAPIMも公式ドキュメントに従って作業するだけで簡単に配置可能です。適当なFunctionsをAPIMに紐づけたら、JWT検証を設定してみましょう。
Inbound processing の項目で Add policy をクリックし、 Validate JWT を選択します。

JWTのバリデーションに関する設定を行う画面が表示されます。
まずトークンはヘッダーで付与するので、ヘッダー名をAuthorizationとでもしておきます。
FirebaseのJWTのアルゴリズムはRS256です。APIMのドキュメントによると、RS256の場合はOpenIDのURLを指定しろとありますので、これを設定します。

ですが、上記URLのnm-qauthの部分をFirebaseのプロジェクト名に置換します。

ここまでの設定を入力したら保存してリクエストを投げてみましょう。(トークンはログインを行う適当なコードで取得済みとしています)
LINQPadから実行すると…通りました!(余談ですがFunctionsはEnvironmentクラスのプロパティを返す適当なAPIを作ってます。Functionsの実行環境が知りたかったので…)

試しにトークンに適当な編集を加え、不正なリクエストを投げるとしっかり401が返されます。

Firebaseあるのに何でそっちのFunctionsを使わないのか?と思われるかもしれません。
実はFunctionsで実行したいDLLがあるんです。そうDLLです。…WindowsのABIですね。
Windowsの資産が…いっぱい…あるんやもん…!
というわけで、次はFunctionsでDLLのInteropでもトライしてみたいですね。(願望)

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

OGAの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう