Azure API Management で Firebase のJWT を Validation

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

最近Azure Functionsを試してみました。VSのテンプレをビルド&デプロイしただけでもう天才ハッカーになれた気分です。さてこのFunctionsは、Azure API Management(以下APIM)というサービスと連携させることでさらに便利になるらしいです。らしいというのは実務でまったく使ったことがないからです。へーしゃNASにエクセルファイル保管してそれを神とあがめているので… AWSとかAzureとか異世界の神なのです。

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

APIMのJWTに関する記事は以下のリンクから参照できます。

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

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

FirebaseのOpenIDのURLは

https://securetoken.google.com/nm-qauth/.well-known/openid-configuration

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

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

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

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

この記事が気に入ったらサポートをしてみませんか?