Konfiguracja oparta na plikach w uwierzytelnianiu Azure App Service

W przypadku uwierzytelniania App Service ustawienia uwierzytelniania można skonfigurować za pomocą pliku. Może być konieczne użycie konfiguracji opartej na plikach w celu korzystania z niektórych funkcji w wersji zapoznawczej uwierzytelniania/autoryzacji App Service przed ich ujawnieniem za pośrednictwem interfejsów API usługi Azure Resource Manager.

Ważne

Pamiętaj, że ładunek aplikacji, a zatem ten plik może przechodzić między środowiskami, podobnie jak w przypadku miejsc. Prawdopodobnie potrzebujesz innej rejestracji aplikacji przypiętej do każdego miejsca, a w takich przypadkach należy nadal używać standardowej metody konfiguracji zamiast używać pliku konfiguracji.

Włączanie konfiguracji opartej na plikach

  1. Utwórz nowy plik JSON dla konfiguracji w katalogu głównym projektu (wdrożony w katalogu D:\home\site\wwwroot w aplikacji internetowej/funkcji). Wypełnij żądaną konfigurację zgodnie z dokumentacją konfiguracji opartą na plikach. W przypadku modyfikowania istniejącej konfiguracji usługi Azure Resource Manager należy przetłumaczyć właściwości przechwycone w authsettings kolekcji na plik konfiguracji.

  2. Zmodyfikuj istniejącą konfigurację przechwyconą w interfejsach API usługi Azure Resource Manager w obszarze Microsoft.Web/sites/<siteName>/config/authsettingsV2. Aby go zmodyfikować, możesz użyć szablonu usługi Azure Resource Manager lub narzędzia, takiego jak Azure Resource Explorer. W kolekcji authsettingsV2 ustaw dwie właściwości (możesz usunąć inne):

    1. Ustaw platform.enabled wartość "true"
    2. Ustaw platform.configFilePath na nazwę pliku (na przykład "auth.json")

Uwaga

Format dla platform.configFilePath różnych platform. W systemie Windows obsługiwane są ścieżki względne i bezwzględne. Zalecany jest względny. W przypadku systemu Linux obecnie obsługiwane są tylko ścieżki bezwzględne, więc wartość ustawienia powinna być następująca: "/home/site/wwwroot/auth.json" lub podobna.

Po wprowadzeniu tej aktualizacji konfiguracji zawartość pliku będzie używana do definiowania zachowania App Service uwierzytelnianie/autoryzacja dla tej lokacji. Jeśli kiedykolwiek chcesz wrócić do konfiguracji usługi Azure Resource Manager, możesz to zrobić, usuwając zmianę ustawienia platform.configFilePath na null.

Dokumentacja pliku konfiguracji

Wszystkie wpisy tajne, do których będą odwoływać się pliki konfiguracji, muszą być przechowywane jako ustawienia aplikacji. Możesz nazwać ustawienia dowolnych elementów. Upewnij się, że odwołania z pliku konfiguracji używają tych samych kluczy.

Następujące opcje konfiguracji są wyczerpane w pliku:

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

Więcej zasobów