Azure App Service kimlik doğrulamasında dosya tabanlı yapılandırma

App Service kimlik doğrulaması ile kimlik doğrulama ayarları bir dosyayla yapılandırılabilir. Azure Resource Manager API'leri aracılığıyla kullanıma sunulmadan önce App Service kimlik doğrulamasının / yetkilendirmenin belirli önizleme özelliklerini kullanmak için dosya tabanlı yapılandırmayı kullanmanız gerekebilir.

Önemli

Uygulama yükünüzün ve dolayısıyla bu dosyanın yuvalarda olduğu gibi ortamlar arasında taşınabileceğini unutmayın. Her yuvaya farklı bir uygulama kaydının sabitlenmiş olmasını isteyebilirsiniz ve bu durumlarda yapılandırma dosyasını kullanmak yerine standart yapılandırma yöntemini kullanmaya devam etmelisiniz.

Dosya tabanlı yapılandırmayı etkinleştirme

  1. Projenizin kökünde yapılandırmanız için yeni bir JSON dosyası oluşturun (web/işlev uygulamanızda D:\home\site\wwwroot dizinine dağıtılır). dosya tabanlı yapılandırma başvurusuna göre istediğiniz yapılandırmayı doldurun. Mevcut bir Azure Resource Manager yapılandırmasını değiştiriyorsanız koleksiyonda yakalanan özellikleri yapılandırma dosyanıza çevirdiğinizden authsettings emin olun.

  2. altındaki Microsoft.Web/sites/<siteName>/config/authsettingsV2Azure Resource Manager API'lerinde yakalanan mevcut yapılandırmayı değiştirin. Bunu değiştirmek için bir Azure Resource Manager şablonu veya Azure Kaynak Gezgini gibi bir araç kullanabilirsiniz. authsettingsV2 koleksiyonunda iki özellik ayarlayın (diğerlerini kaldırabilirsiniz):

    1. "true" olarak ayarlayın platform.enabled
    2. Dosyanın adına ayarlayın platform.configFilePath (örneğin, "auth.json")

Not

biçimi platform.configFilePath platformlar arasında değişir. Windows'da hem göreli hem de mutlak yollar desteklenir. Göreli önerilir. Linux için şu anda yalnızca mutlak yollar desteklenmektedir, bu nedenle ayarın değeri "/home/site/wwwroot/auth.json" veya benzeri olmalıdır.

Bu yapılandırma güncelleştirmesini yaptıktan sonra, dosyanın içeriği bu site için App Service Kimlik Doğrulaması / Yetkilendirme davranışını tanımlamak için kullanılır. Azure Resource Manager yapılandırmasına dönmek isterseniz ayarı null olarak değiştirerek platform.configFilePath bunu yapabilirsiniz.

Yapılandırma dosyası başvurusu

Yapılandırma dosyanızdan başvurulacak tüm gizli diziler uygulama ayarları olarak depolanmalıdır. Ayarları istediğiniz şekilde adlandırabilirsiniz. Yapılandırma dosyasındaki başvuruların aynı anahtarları kullandığından emin olun.

Aşağıdakiler, dosyadaki olası yapılandırma seçeneklerini tüketmektedir:

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

Diğer kaynaklar