staticwebapp.config.json はbuildの都度生成される!
azure static web appsの組み込み認証・認可機能は、staticwebapp.config.json でその挙動を構成することになっています。RouteにallowedRolesを指定してアクセス制限が行えます。を試してみました。が、うまくいきません。"allowedRoles": [ "authenticated"]を指定したページがログインなしで表示されてしまいますTT
プロジェクトフォルダのstaticwebapp.config.jsonを編集して保存しても、それがそのままサイトにデプロイされるわけでありません。←これを勘違いしていました。勘違いしますよね;NuxtのAzure対応のドキュメントにはちゃんと書かれているのですが、英語だし、あっさり書かれているし、allowedRoles指定の具体例は書かれていないし;; staticwebapp.config.jsonは、Azure用 Github Action のbuildプロセスで都度生成されてそれがデプロイされます。プロジェクトフォルダのstaticwebapp.config.json が意味を持つのは、swa cli で実行したときだけで、ローカルでbuildしたときも生成、上書きされます。
ということで、allowedRolesの設定は、nuxt.config.tsの中で azure config として設定する必要がありました。
nitro: {
azure: {
config: {
// ...
platform: {
apiRuntime: 'node:18'
},
routes: [
{
"route": "/information",
"allowedRoles": ["authenticated"],
}
]
}
}
},
この内容が、build時に生成される staticwebapp.config.json のroutesに追加されるようです。これでデプロイをしたところ、無事、401: Unauthorized が表示されました。罠かよ!と思いましたが、考えてみると、nuxt にとってAzureホストは選択肢のひとつにすぎず、こうゆう仕様になるのがあたり前の気がしてきます。というか、ここまで対応されていることに逆に驚きます。という理解までに時間がかかるのでした。
あと、このroute設定が有効なのは、つまりEasyAuthが関知するのは、あくまでサーバーへの要求時だけで、App内のNavigateToやNuxtLinkのページ遷移については、この設定とは別にApp内の仕組みとして対応が必要になるでしょう。このあたりの役割分担もハマりどころの気がします。Easy Authを使うとしても、アプリ側でまったく何もしなくて良いというわけではなさそうです。