Configuração baseada em arquivo na autenticação do Serviço de Aplicativo do Azure

Com a autenticação do Serviço de Aplicativo, as configurações de autenticação podem ser configuradas com um arquivo. Talvez seja necessário usar a configuração baseada em arquivo para usar determinados recursos de versão prévia da autenticação/autorização do Serviço de Aplicativo antes de serem expostos por meio de APIs do Azure Resource Manager.

Importante

Lembre-se de que o conteúdo do aplicativo e, portanto, esse arquivo pode ser movido entre ambientes, assim como nos slots. É provável que você queira um registro de aplicativo diferente fixado em cada slot e, nesses casos, você deve continuar usando o método de configuração padrão em vez de usar o arquivo de configuração.

Habilitação da configuração baseada em arquivo

  1. Crie um arquivo JSON para sua configuração na raiz do seu projeto (implantado em C:\home\site\wwwroot no aplicativo Web/de funções). Preencha a configuração desejada de acordo com a referência de configuração baseada em arquivo. Se estiver modificando uma configuração de Azure Resource Manager existente, certifique-se de converter as propriedades capturadas na coleção authsettings em seu arquivo de configuração.

  2. Modifique a configuração existente, que é capturada nas APIs do Azure Resource Manager em Microsoft.Web/sites/<siteName>/config/authsettingsV2. Para modificar isso, você pode usar um modelo de Azure Resource Manager ou uma ferramenta como Azure Resource Explorer. Dentro da coleção authsettingsV2, defina duas propriedades (você pode remover outras):

    1. Defina platform.enabled como "true"
    2. Defina platform.configFilePath como o nome do arquivo (por exemplo, "auth.json")

Observação

O formato de platform.configFilePath varia entre plataformas. No Windows, há suporte para caminhos relativos e absolutos. Relativo é recomendado. Para o Linux, somente caminhos absolutos têm suporte no momento, portanto, o valor da configuração deve ser "/home/site/wwwroot/auth.json" ou semelhante.

Depois de fazer essa atualização de configuração, o conteúdo do arquivo será usado para definir o comportamento da Autenticação/Autorização do Serviço de Aplicativo para esse site. Se você quiser retornar à configuração do Azure Resource Manager, poderá fazer isso removendo a definição da configuração platform.configFilePath para nulo.

Referência do arquivo de configuração

Todos os segredos que serão referenciados do arquivo de configuração devem ser armazenados como configurações do aplicativo. Você pode nomear as configurações de qualquer maneira que desejar. Apenas certifique-se de que as referências do arquivo de configuração usem as mesmas chaves.

Os seguintes mostram as possíveis opções de configuração dentro do arquivo:

{
    "platform": {
        "enabled": <true|false>
    },
    "globalValidation": {
        "unauthenticatedClientAction": "RedirectToLoginPage|AllowAnonymous|RejectWith401|RejectWith404",
        "redirectToProvider": "<default provider alias>",
        "excludedPaths": [
            "/path1",
            "/path2",
            "/path3/subpath/*"
        ]
    },
    "httpSettings": {
        "requireHttps": <true|false>,
        "routes": {
            "apiPrefix": "<api prefix>"
        },
        "forwardProxy": {
            "convention": "NoProxy|Standard|Custom",
            "customHostHeaderName": "<host header value>",
            "customProtoHeaderName": "<proto header value>"
        }
    },
    "login": {
        "routes": {
            "logoutEndpoint": "<logout endpoint>"
        },
        "tokenStore": {
            "enabled": <true|false>,
            "tokenRefreshExtensionHours": "<double>",
            "fileSystem": {
                "directory": "<directory to store the tokens in if using a file system token store (default)>"
            },
            "azureBlobStorage": {
                "sasUrlSettingName": "<app setting name containing the sas url for the Azure Blob Storage if opting to use that for a token store>"
            }
        },
        "preserveUrlFragmentsForLogins": <true|false>,
        "allowedExternalRedirectUrls": [
            "https://uri1.azurewebsites.net/",
            "https://uri2.azurewebsites.net/",
            "url_scheme_of_your_app://easyauth.callback"
        ],
        "cookieExpiration": {
            "convention": "FixedTime|IdentityDerived",
            "timeToExpiration": "<timespan>"
        },
        "nonce": {
            "validateNonce": <true|false>,
            "nonceExpirationInterval": "<timespan>"
        }
    },
    "identityProviders": {
        "azureActiveDirectory": {
            "enabled": <true|false>,
            "registration": {
                "openIdIssuer": "<issuer url>",
                "clientId": "<app id>",
                "clientSecretSettingName": "APP_SETTING_CONTAINING_AAD_SECRET",
            },
            "login": {
                "loginParameters": [
                    "paramName1=value1",
                    "paramName2=value2"
                ]
            },
            "validation": {
                "allowedAudiences": [
                    "audience1",
                    "audience2"
                ]
            }
        },
        "facebook": {
            "enabled": <true|false>,
            "registration": {
                "appId": "<app id>",
                "appSecretSettingName": "APP_SETTING_CONTAINING_FACEBOOK_SECRET"
            },
            "graphApiVersion": "v3.3",
            "login": {
                "scopes": [
                    "public_profile",
                    "email"
                ]
            },
        },
        "gitHub": {
            "enabled": <true|false>,
            "registration": {
                "clientId": "<client id>",
                "clientSecretSettingName": "APP_SETTING_CONTAINING_GITHUB_SECRET"
            },
            "login": {
                "scopes": [
                    "profile",
                    "email"
                ]
            }
        },
        "google": {
            "enabled": true,
            "registration": {
                "clientId": "<client id>",
                "clientSecretSettingName": "APP_SETTING_CONTAINING_GOOGLE_SECRET"
            },
            "login": {
                "scopes": [
                    "profile",
                    "email"
                ]
            },
            "validation": {
                "allowedAudiences": [
                    "audience1",
                    "audience2"
                ]
            }
        },
        "twitter": {
            "enabled": <true|false>,
            "registration": {
                "consumerKey": "<consumer key>",
                "consumerSecretSettingName": "APP_SETTING_CONTAINING TWITTER_CONSUMER_SECRET"
            }
        },
        "apple": {
            "enabled": <true|false>,
            "registration": {
                "clientId": "<client id>",
                "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_SECRET"
            },
            "login": {
                "scopes": [
                    "profile",
                    "email"
                ]
            }
        },
        "openIdConnectProviders": {
            "<providerName>": {
                "enabled": <true|false>,
                "registration": {
                    "clientId": "<client id>",
                    "clientCredential": {
                        "clientSecretSettingName": "<name of app setting containing client secret>"
                    },
                    "openIdConnectConfiguration": {
                        "authorizationEndpoint": "<url specifying authorization endpoint>",
                        "tokenEndpoint": "<url specifying token endpoint>",
                        "issuer": "<url specifying issuer>",
                        "certificationUri": "<url specifying jwks endpoint>",
                        "wellKnownOpenIdConfiguration": "<url specifying .well-known/open-id-configuration endpoint - if this property is set, the other properties of this object are ignored, and authorizationEndpoint, tokenEndpoint, issuer, and certificationUri are set to the corresponding values listed at this endpoint>"
                    }
                },
                "login": {
                    "nameClaimType": "<name of claim containing name>",
                    "scopes": [
                        "openid",
                        "profile",
                        "email"
                    ],
                    "loginParameterNames": [
                        "paramName1=value1",
                        "paramName2=value2"
                    ],
                }
            },
            //...
        }
    }
}

Mais recursos