Configurazione basata su file nell'autenticazione del servizio app di Azure

Con Autenticazione servizio app si possono configurare le impostazioni di autenticazione con un file. Potrebbe essere necessario utilizzare la configurazione basata su file per usare determinate funzionalità di anteprima dell'autenticazione/autorizzazione del servizio app prima che vengano esposte tramite le API Azure Resource Manager.

Importante

Tenere presente che il payload dell'app, quindi questo file, può spostarsi tra gli ambienti, come con gli slot. È probabile che sia necessario aggiungere a ogni slot una registrazione dell'app diversa: in questi casi è consigliabile continuare a usare il metodo di configurazione standard anziché 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 C:\home\site\wwwroot nella propria app web/funzione). Riempire la configurazione desiderata in base al riferimento della configurazione basata su file. Se si modifica una configurazione di Azure Resource Manager esistente, è importante convertire le proprietà acquisite nella raccolta authsettings nel proprio file di configurazione.

  2. Modificare la configurazione esistente acquisita nelle API di Azure Resource Manager, in Microsoft.Web/sites/<siteName>/config/authsettingsV2. Per modificarla è possibile usare un modello di Azure Resource Manager o uno strumento come Azure Resource Explorer. Nella raccolta authsettingsV2, impostare due proprietà (è possibile rimuovere le altre):

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

Nota

Il formato di platform.configFilePath varia tra le piattaforme. Windows supporta sia i percorsi relativi sia quelli assoluti. È consigliabile quello relativo. Linux attualmente supporta solo i percorsi assoluti, quindi il valore dell'impostazione dovrebbe apparire come "/home/site/wwwroot/auth.json" o in modo simile.

Dopo aver completato l'aggiornamento della configurazione, il contenuto del file verrà usato per definire il comportamento dell'autenticazione/autorizzazione del servizio app per quel sito. Se si desidera tornare alla configurazione di Azure Resource Manager, è possibile farlo cambiando l'impostazione platform.configFilePath su "null".

Riferimento del file di configurazione

Tutti i segreti a cui il file di configurazione farà riferimento devono essere archiviati come impostazioni dell'applicazione. Si può assegnare alle impostazioni qualsiasi nome. È necessario che i riferimenti del file di configurazione usino le stesse chiavi.

Di seguito sono elencate le 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