##背景
- local開発環境はdocker使ってazure functions構成のnodejsのapiを開発している。
- 認証としてはfunctionのauthLevelを使いたい。
- authLevelの設定はこんな感じ
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"route": "your/route",
"methods": ["post"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"scriptFile": "../your/source/folder/index.js"
}
-
API_KEY
はazure function appのポータルからとるか、az cliで取れたりする。 - 使う時はこんな感じでcodeというパラメータを使う:
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?code=<API_KEY>
- あるいはrequestのheadersに
x-functions-key
を追加することで認証ができる。
課題
- Localのテストで、
開発環境のdocker hosted azure functionsに認証を通すには、
API_KEY
を手動で設定する必要がある。(自動生成したkeyは知らないし)
解決方法
*まずは下記ファイルを作成:
host_local_secrets.json
{
"masterKey": {
"name": "master",
"value": "your_local_test_master_key",
"encrypted": false
},
"functionKeys": [{
"name": "default",
"value": "your_local_test_function_key",
"encrypted": false
}]
}
- Dockerfileに下記を追加:
Dockerfile
FROM mcr.microsoft.com/azure-functions/node:3.0-node12
RUN mkdir /etc/secrets/
ENV FUNCTIONS_SECRETS_PATH=/etc/secrets
ENV AzureWebJobsSecretStorageType=Files
ADD host_local_secrets.json /etc/secrets/host.json
- Boom!!! Done. 認証ができるようになった。
- Fly as you wish. To the moon. Freely.