Configurazione basata su file nell'autenticazione Servizio app di Azure

Con l'autenticazione servizio app, è possibile configurare le impostazioni di autenticazione con un file. Potrebbe essere necessario usare la configurazione basata su file per usare determinate funzionalità di anteprima di servizio app autenticazione/autorizzazione prima di essere esposte tramite le API di Azure Resource Manager.

Importante

Tenere presente che il payload dell'app e quindi questo file può spostarsi tra ambienti, come con gli slot. È probabile che si voglia aggiungere una registrazione dell'app diversa a ogni slot e, in questi casi, è consigliabile continuare a usare il metodo di configurazione standard anziché usare il file di configurazione.

Abilitazione della configurazione basata su file

  1. Creare un nuovo file JSON per la configurazione nella radice del progetto (distribuito in D:\home\site\wwwroot nell'app Web/function). Compilare la configurazione desiderata in base al riferimento alla configurazione basata su file. Se si modifica una configurazione di Azure Resource Manager esistente, assicurarsi di tradurre le proprietà acquisite nella raccolta nel authsettings file di configurazione.

  2. Modificare la configurazione esistente, acquisita nelle API di Azure Resource Manager in Microsoft.Web/sites/<siteName>/config/authsettingsV2. Per modificarlo, è possibile usare un modello di Azure Resource Manager o uno strumento come Esplora risorse di Azure. All'interno dell'insieme authsettingsV2 impostare due proprietà (è possibile rimuovere altri):

    1. Impostare platform.enabled su "true"
    2. Impostare platform.configFilePath sul nome del file , ad esempio "auth.json")

Nota

Il formato per platform.configFilePath varia tra piattaforme. In Windows sono supportati sia percorsi relativi che assoluti. La relativa è consigliata. Per Linux sono attualmente supportati solo i percorsi assoluti, quindi il valore dell'impostazione deve essere "/home/site/wwwroot/auth.json" o simile.

Dopo aver effettuato l'aggiornamento della configurazione, il contenuto del file verrà usato per definire il comportamento di servizio app Autenticazione/autorizzazione per tale sito. Se si desidera tornare alla configurazione di Azure Resource Manager, è possibile rimuoverla modificando l'impostazione platform.configFilePath su Null.

Informazioni di riferimento sul file di configurazione

Tutti i segreti a cui verrà fatto riferimento dal file di configurazione devono essere archiviati come impostazioni dell'applicazione. È possibile assegnare un nome alle impostazioni desiderate. Assicurarsi solo che i riferimenti dal file di configurazione usino le stesse chiavi.

I seguenti esaurimento possibili opzioni di configurazione all'interno del file:

{
    "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"
                    ],
                }
            },
            //...
        }
    }
}

Altre risorse