Azure App Service kimlik doğrulamasında oturum açma ve oturum kapatma ' yı özelleştirme

Bu makalede, App Service ' de yerleşik kimlik doğrulaması ve yetkilendirmeyikullanırken Kullanıcı oturum açma işlemlerini ve oturum açma işlemlerini özelleştirmeyi nasıl özelleştireceğiniz gösterilmektedir.

Çoklu oturum açma sağlayıcılarını kullanma

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

İlk olarak, Azure portal kimlik doğrulama/yetkilendirme sayfasında, etkinleştirmek istediğiniz her bir kimlik sağlayıcısını yapılandırın.

İsteğin kimliği doğrulanmamış olduğunda gerçekleştirilecek eylem Için anonim isteklere izin ver (eylem yok) seçeneğini belirleyin.

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

<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ının oturum açması için ilgili oturum açma sayfası açılır.

Kullanıcı oturum açma sonrası eklentisini özel bir URL 'ye yönlendirmek için post_login_redirect_uri sorgu dizesi parametresini kullanın (kimlik sağlayıcısı yapılandırmanızda yeniden yönlendirme URI 'si ile karıştırılmamalıdır). Örneğin, oturum açtıktan 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 ile yönlendirilen oturum açma

İstemci ile yönlendirilen bir oturum açma bölümünde, uygulama kullanıcıdan sağlayıcıya özgü SDK kullanarak kimlik sağlayıcısına oturum açar. Uygulama kodu daha sonra, bir HTTP POST isteği kullanarak doğrulama için App Service ( kimlik doğrulama akışı) için elde edilen kimlik doğrulama belirtecini gönderir. Azure Mobile Apps SDK 'ları bu oturum açma akışını kullanır. Bu doğrulamanın kendisi, istenen uygulama kaynaklarına erişim hakkı vermez, ancak başarılı bir doğrulama size uygulama kaynaklarına erişmek için kullanabileceğiniz bir oturum belirteci verecektir.

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

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 farklılık gösterir. Ayrıntılar için aşağıdaki tabloya bakın:

Sağlayıcı değeri İstek gövdesinde gerekli Yorumlar
aad {"access_token":"<access_token>"} id_token, refresh_token , Ve expires_in özellikleri isteğe bağlıdır.
microsoftaccount {"access_token":"<access_token>"} veya {"authentication_token": "<token>" authentication_token üzerinde tercih edilir access_token . expires_inÖzelliği isteğe bağlıdır.
Canlı hizmetlerden belirteç istenirken, her zaman wl.basic kapsam isteyin.
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, authorization_code isteğe bağlı olarak bir özelliği de olabilir redirect_uri .
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":"<acces_token_secret>"}

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

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

Bu oturum belirtecine sahip olduğunuzda, X-ZUMO-AUTH http isteklerinize üst bilgi ekleyerek korumalı uygulama kaynaklarına erişebilirsiniz. Örnek:

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

Oturum kapatma

Kullanıcılar GET , uygulamanın uç noktasına bir istek göndererek oturumu kapatma işlemini başlatabilir /.auth/logout . GETİstek şunları yapar:

  • Geçerli oturumdan kimlik doğrulama tanımlama bilgilerini temizler.
  • Geçerli kullanıcının belirteçlerini belirteç deposundan siler.
  • Azure Active Directory 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 oturum kapatma istemciyi URL 'ye yeniden yönlendirir /.auth/logout/done . Sorgu parametresini ekleyerek, oturum kapatma sonrası yeniden yönlendirme sayfasını değiştirebilirsiniz post_logout_redirect_uri . Örnek:

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

Değerini kodlamanız önerilir post_logout_redirect_uri .

Tam nitelikli URL 'Ler kullanılırken, URL aynı etki alanında barındırılıyor ya da uygulamanız için izin verilen bir dış yeniden yönlendirme URL 'SI olarak yapılandırılmış olmalıdır. Aşağıdaki örnekte, https://myexternalurl.com aynı etki alanında barındırılmayan öğesine yeniden yönlendirmek için:

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

Azure Cloud Shellaş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 gibi aynı sayfanın aynı bölümüne yönlendirilmek isterler /wiki/Main_Page#SectionZ . Bununla birlikte, URL parçaları (örneğin, #SectionZ ) sunucuya hiçbir şekilde gönderilmediğinden, OAuth oturum açma tamamlandıktan sonra varsayılan olarak korunmaz ve uygulamanıza yeniden yönlendirilir. Kullanıcılar daha sonra istediğiniz yere gitmek gerektiğinde bir daha iyi deneyim yaşar. 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 genelinde URL parçalarını koruyabilirsiniz. Bunu yapmak için olarak adlandırılan bir uygulama ayarı belirleyin WEBSITE_AUTH_PRESERVE_URL_FRAGMENT true . Bunu Azure Portalyapabilir veya Azure Cloud Shellyalnızca aşağıdaki komutu çalıştırabilirsiniz:

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ırlayın

hem Microsoft hesabı hem de Azure Active Directory 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. Azure AD, oturum açma hesapları için herhangi bir sayıda özel etki alanı sağlar. Ancak, kullanıcılarınızı kendi markalı Azure AD oturum açma sayfanıza (örneğin,) doğrudan hızlandırmak isteyebilirsiniz contoso.com . Oturum açma hesaplarının etki alanı adını önermek için aşağıdaki adımları izleyin.

İçinde https://resources.azure.com , abonelikler > * <subscription_name* > ResourceGroups > * _ <resource_group_name> _ * > sağlayıcıları > Microsoft. Web > Sites > * *_ <app_name> _ * * > config > authsettings öğesine tıklayın' e gidin.

Düzenle' ye tıklayın, aşağıdaki özelliği değiştirin ve ardından Yerleştir' e tıklayın. İstediğiniz <domain_name> etki alanı ile değiştirdiğinizden emin olun.

"additionalLoginParams": ["domain_hint=<domain_name>"]

Bu ayar, domain_hint sorgu dizesi parametresini, oturum açma yeniden YÖNLENDIRME URL 'sine ekler.

Önemli

domain_hintYeniden YÖNLENDIRME URL 'sini aldıktan sonra istemcinin parametresini kaldırması ve sonra farklı bir etki alanı ile oturum açması mümkündür. Bu işlev kullanışlı olsa da, bir güvenlik özelliği değildir.

Kullanıcılara yetki verme veya reddetme

App Service en basit yetkilendirme durumu (yani, kimliği doğrulanmamış istekleri reddetme) ile ilgilenirken, uygulamanız yalnızca belirli bir kullanıcı grubuyla erişimi sınırlandırma gibi daha ayrıntılı yetkilendirme davranışı gerektirebilir. Belirli durumlarda, oturum açmış kullanıcıya izin 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ği gerektirmeden yardım edebilir.

sunucu düzeyi (yalnızca Windows uygulamalar)

herhangi bir Windows uygulaması için, Web.config dosyasını düzenleyerek ııs 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ı Gezgini ' nde, site/Wwwroot ' ya gidin. Web.config yoksa, + > yeni dosya' yı seçerek oluşturun.

  3. Web.config düzenlemek için kurşun kalem ' i seçin. Aşağıdaki yapılandırma kodunu ekleyin ve Kaydet' e tıklayın. Web.config zaten varsa, <authorization> öğeyi içindeki her şeyi eklemeniz yeterlidir. Öğesinde izin vermek istediğiniz hesapları ekleyin <allow> .

    <?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 bir anahtar yetkilendirme sağlayabilir. Örnek:

Uygulama düzeyi

Diğer düzeylerin herhangi biri ihtiyacınız olan yetkilendirmeyi sağlamıyorsa veya platformunuz veya kimlik sağlayıcınız desteklenmiyorsa, Kullanıcı taleplerinegöre kullanıcılara yetki vermek için özel kod yazmanız gerekir.

Diğer kaynaklar