Azure Uygulaması Hizmeti kimlik doğrulamasında oturum açmayı ve oturumu kapatmayı özelleştirme

Bu makalede, App Service'te yerleşik kimlik doğrulaması ve yetkilendirmeyi kullanırken kullanıcı oturum açma ve oturum kapatmalarını nasıl özelleştirebileceğiniz gösterilmektedir.

Birden çok oturum açma sağlayıcısı kullanma

Portal yapılandırması, kullanıcılarınıza (hem Facebook hem de Twitter gibi) birden çok oturum açma sağlayıcısı sunmak için anahtar teslimi bir yol sunmaz. Ancak, işlevselliği uygulamanıza eklemek zor değildir. Adımlar aşağıdaki şekilde özetlenmiştir:

İlk olarak, Azure portalındaki Kimlik Doğrulaması / Yetkilendirme sayfasında, etkinleştirmek istediğiniz kimlik sağlayıcısının her birini yapılandırın.

İstek kimliği doğrulanmadığında gerçekleştirilen eylem bölümünde Anonim isteklere izin ver (eylem yok) seçeneğini belirleyin.

Oturum açma sayfasında, gezinti çubuğunda veya uygulamanızın başka bir konumunda, etkinleştirdiğiniz sağlayıcıların her birine (/.auth/login/<provider>) bir oturum açma bağlantısı ekleyin. Örneğin:

<a href="/.auth/login/aad">Log in with the Microsoft Identity Platform</a>
<a href="/.auth/login/facebook">Log in with Facebook</a>
<a href="/.auth/login/google">Log in with Google</a>
<a href="/.auth/login/twitter">Log in with Twitter</a>
<a href="/.auth/login/apple">Log in with Apple</a>

Kullanıcı bağlantılardan birine tıkladığında, kullanıcıda oturum açmak için ilgili oturum açma sayfası açılır.

Kullanıcı oturum açma sonrasında özel bir URL'ye yeniden yönlendirmek için sorgu dizesi parametresini kullanın post_login_redirect_uri (kimlik sağlayıcısı yapılandırmanızdaki Yeniden Yönlendirme URI'si ile karıştırılmamalıdır). Örneğin, oturum açmadan sonra kullanıcıya gitmek için /Home/Index aşağıdaki HTML kodunu kullanın:

<a href="/.auth/login/<provider>?post_login_redirect_uri=/Home/Index">Log in</a>

İstemci tarafından yönlendirilen oturum açma

İstemci tarafından yönlendirilen bir oturum açmada uygulama, sağlayıcıya özgü bir SDK kullanarak kimlik sağlayıcısında kullanıcı oturum açar. Ardından uygulama kodu, http POST isteği kullanarak doğrulama için sonuçta elde edilen kimlik doğrulama belirtecini App Service'e gönderir (bkz . Kimlik doğrulama akışı). Bu doğrulama aslında size istenen uygulama kaynaklarına erişim vermez, ancak başarılı bir doğrulama, uygulama kaynaklarına erişmek için kullanabileceğiniz bir oturum belirteci verir.

Sağlayıcı belirtecini doğrulamak için App Service uygulamasının önce istenen sağlayıcıyla yapılandırılması gerekir. Çalışma zamanında, kimlik doğrulama belirtecini sağlayıcınızdan aldıktan sonra doğrulama için belirteci adresine /.auth/login/<provider> gönderin. Örneğin:

POST https://<appname>.azurewebsites.net/.auth/login/aad HTTP/1.1
Content-Type: application/json

{"id_token":"<token>","access_token":"<token>"}

Belirteç biçimi sağlayıcıya göre biraz değişir. Ayrıntılar için aşağıdaki tabloya bakın:

Sağlayıcı değeri İstek gövdesinde gerekli Açıklamalar
aad {"access_token":"<access_token>"} id_token, refresh_tokenve expires_in özellikleri isteğe bağlıdır.
microsoftaccount {"access_token":"<access_token>"} veya {"authentication_token": "<token>" authentication_token yerine access_tokentercih edilir. expires_in özelliği isteğe bağlıdır.
Canlı hizmetlerden belirteç isteğinde bulunurken her zaman kapsamı isteyin wl.basic .
google {"id_token":"<id_token>"} authorization_code özelliği isteğe bağlıdır. Bir authorization_code değer sağlamak, belirteç deposuna bir erişim belirteci ve yenileme belirteci ekler. Belirtildiğinde isteğe authorization_code bağlı olarak bir redirect_uri özellik de eşlik edebilir.
facebook {"access_token":"<user_access_token>"} Facebook'tan geçerli bir kullanıcı erişim belirteci kullanın.
twitter {"access_token":"<access_token>", "access_token_secret":"<access_token_secret>"}

Not

App Service kimlik doğrulaması için GitHub sağlayıcısı özelleştirilmiş oturum açmayı ve oturumu kapatmayı desteklemez.

Sağlayıcı belirteci başarıyla doğrulanırsa, API yanıt gövdesinde oturum belirteciniz olan ile authenticationToken döndürür.

{
    "authenticationToken": "...",
    "user": {
        "userId": "sid:..."
    }
}

Bu oturum belirtecini aldıktan sonra, HTTP isteklerinize üst bilgiyi ekleyerek X-ZUMO-AUTH korumalı uygulama kaynaklarına erişebilirsiniz. Örneğin:

GET https://<appname>.azurewebsites.net/api/products/1
X-ZUMO-AUTH: <authenticationToken_value>

Oturumu kapatma

Kullanıcılar, uygulamanın /.auth/logout uç noktasına bir GET istek göndererek oturum kapatma işlemi başlatabilir. İstek GET aşağıdakileri yapar:

  • Geçerli oturumdaki kimlik doğrulama tanımlama bilgilerini temizler.
  • Geçerli kullanıcının belirteçlerini belirteç deposundan siler.
  • Microsoft Entra Id ve Google için, kimlik sağlayıcısında sunucu tarafında oturum kapatma gerçekleştirir.

Web sayfasında basit bir oturum kapatma bağlantısı şöyle olabilir:

<a href="/.auth/logout">Sign out</a>

Varsayılan olarak, başarılı bir oturumu kapatma, istemciyi URL'ye /.auth/logout/completeyönlendirir. Sorgu parametresini ekleyerek post_logout_redirect_uri oturum kapatma sonrası yeniden yönlendirme sayfasını değiştirebilirsiniz. Örneğin:

GET /.auth/logout?post_logout_redirect_uri=/index.html

değerini post_logout_redirect_urikodlamanız önerilir.

Tam URL'ler kullanılırken, URL'nin aynı etki alanında barındırılması veya uygulamanız için izin verilen bir dış yeniden yönlendirme URL'si olarak yapılandırılması gerekir. Aşağıdaki örnekte, aynı etki alanında barındırılmayan bir sunucuya yönlendirmek için https://myexternalurl.com :

GET /.auth/logout?post_logout_redirect_uri=https%3A%2F%2Fmyexternalurl.com

Azure Cloud Shell'de aşağıdaki komutu çalıştırın:

az webapp auth update --name <app_name> --resource-group <group_name> --allowed-external-redirect-urls "https://myexternalurl.com"

URL parçalarını koruma

Kullanıcılar uygulamanızda oturum açtıktan sonra genellikle aynı sayfanın aynı bölümüne (gibi /wiki/Main_Page#SectionZ) yönlendirilmesini isterler. Ancak, URL parçaları (örneğin, #SectionZ) hiçbir zaman sunucuya gönderilmediğinden, OAuth oturum açma işlemi tamamlandıktan ve uygulamanıza yeniden yönlendirildikten sonra varsayılan olarak korunmaz. Kullanıcılar daha sonra istenen yer işaretine yeniden gitmeleri gerektiğinde en iyi duruma getirici bir deneyim elde ederler. Bu sınırlama tüm sunucu tarafı kimlik doğrulama çözümleri için geçerlidir.

App Service kimlik doğrulamasında, OAuth oturum açma işlemlerinde URL parçalarını koruyabilirsiniz. Bunu yapmak için adlı WEBSITE_AUTH_PRESERVE_URL_FRAGMENT bir uygulama ayarını olarak trueayarlayın. Bunu Azure portalında yapabilir veya Azure Cloud Shell'de aşağıdaki komutu çalıştırmanız yeterlidir:

az webapp config appsettings set --name <app_name> --resource-group <group_name> --settings WEBSITE_AUTH_PRESERVE_URL_FRAGMENT="true"

Oturum açma hesaplarının etki alanını sınırlama

Hem Microsoft Hesabı hem de Microsoft Entra Id, birden çok etki alanından oturum açmanızı sağlar. Örneğin, Microsoft Hesabı outlook.com, live.com ve hotmail.com hesaplarına izin verir. Microsoft Entra Id, oturum açma hesapları için herhangi bir sayıda özel etki alanına izin verir. Ancak, kullanıcılarınızı doğrudan kendi markalı Microsoft Entra oturum açma sayfanıza (örneğin contoso.com) hızlandırmak isteyebilirsiniz. Oturum açma hesaplarının etki alanı adını önermek için şu adımları izleyin.

  1. içindehttps://resources.azure.com, sayfanın üst kısmında Oku/Yaz'ı seçin.

  2. Sol tarayıcıda abonelikler abonelik-adı>resourceGroups><><resource-group-name>>sağlayıcıları>Microsoft.Web>siteleri><uygulama-adı>>yapılandırması>authsettingsV2'ye gidin.

  3. Düzenle'yi tıklatın.

  4. Öğe içeren bir loginParametersdomain_hint dizi ekleyin.

    "identityProviders": {
        "azureActiveDirectory": {
            "login": {
                "loginParameters": ["domain_hint=<domain-name>"],
            }
        }
    }
    
  5. Koy'a tıklayın.

Bu ayar, sorgu dizesi parametresini oturum açma yeniden yönlendirme URL'sine ekler domain_hint .

Önemli

İstemcinin yeniden yönlendirme URL'sini aldıktan sonra parametresini domain_hint kaldırması ve ardından farklı bir etki alanıyla oturum açması mümkündür. Bu nedenle bu işlev kullanışlı olsa da bir güvenlik özelliği değildir.

Kullanıcıları yetkilendirme veya reddetme

App Service en basit yetkilendirme olayıyla ilgilenirken (yani kimliği doğrulanmamış istekleri reddederken), uygulamanız erişimi yalnızca belirli bir kullanıcı grubuyla sınırlama gibi daha ayrıntılı yetkilendirme davranışı gerektirebilir. Bazı durumlarda, oturum açmış kullanıcıya erişim izni vermek veya erişimi reddetmek için özel uygulama kodu yazmanız gerekir. Diğer durumlarda, App Service veya kimlik sağlayıcınız kod değişikliğine gerek kalmadan yardımcı olabilir.

Sunucu düzeyi (yalnızca Windows uygulamaları)

Herhangi bir Windows uygulaması için, Web.config dosyasını düzenleyerek IIS web sunucusunun yetkilendirme davranışını tanımlayabilirsiniz. Linux uygulamaları IIS kullanmaz ve Web.config aracılığıyla yapılandırılamaz.

  1. https://<app-name>.scm.azurewebsites.net/DebugConsole sayfasına gidin

  2. App Service dosyalarınızın tarayıcı gezgininde site/wwwroot adresine gidin. Web.config yoksa Yeni Dosya'yı seçerek +>oluşturun.

  3. Düzenlemek için Web.config kalemini seçin. Aşağıdaki yapılandırma kodunu ekleyin ve Kaydet'e tıklayın. Web.config zaten varsa, içindeki her şeyi içeren öğesini eklemeniz <authorization> gerekir. öğesine izin <allow> vermek istediğiniz hesapları ekleyin.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
       <system.web>
          <authorization>
            <allow users="user1@contoso.com,user2@contoso.com"/>
            <deny users="*"/>
          </authorization>
       </system.web>
    </configuration>
    

Kimlik sağlayıcısı düzeyi

Kimlik sağlayıcısı belirli anahtar teslimi yetkilendirme sağlayabilir. Örneğin:

Uygulama düzeyi

Diğer düzeylerden biri ihtiyacınız olan yetkilendirmeyi sağlamazsa veya platform veya kimlik sağlayıcınız desteklenmiyorsa, kullanıcıları kullanıcı taleplerine göre yetkilendirmek için özel kod yazmanız gerekir.

Diğer kaynaklar