Azure Container Apps'te kimlik doğrulaması ve yetkilendirme

Azure Container Apps, harici giriş özellikli kapsayıcı uygulamanızı en az kodla veya hiç kod olmadan güvenli hale getirmek için yerleşik kimlik doğrulama ve yetkilendirme özellikleri (bazen "Kolay Kimlik Doğrulaması" olarak adlandırılır) sağlar.

Kimlik doğrulaması ve yetkilendirme ile ilgili ayrıntılar için, seçtiğiniz sağlayıcı için aşağıdaki kılavuzlara bakın.

Neden yerleşik kimlik doğrulamasını kullanmalısınız?

Kimlik doğrulaması ve yetkilendirme için bu özelliği kullanmanız gerekmez. Paketlenmiş güvenlik özelliklerini tercih ettiğiniz web çerçevenizde kullanabilir veya kendi yardımcı programlarınızı yazabilirsiniz. Ancak kimlik doğrulaması (oturum açma kullanıcıları) ve yetkilendirme (güvenli verilere erişim sağlama) için güvenli bir çözüm uygulamak önemli çaba gerektirebilir. Endüstrinin en iyi yöntemlerini ve standartlarını izlediğinizden ve uygulamanızı güncel tuttuğunuzdan emin olmanız gerekir.

Container Apps'in yerleşik kimlik doğrulama özelliği, federasyon kimlik sağlayıcılarıyla kullanıma hazır kimlik doğrulaması sağlayarak size zaman ve çaba kazandırır. Bu özellikler, uygulamanızı geliştirmeye daha fazla ve güvenlik sistemleri oluşturmaya daha az zaman odaklanmanızı sağlar.

Avantajlara şunlar dahildir:

  • Azure Container Apps, çeşitli yerleşik kimlik doğrulama sağlayıcılarına erişim sağlar.
  • Yerleşik kimlik doğrulama özellikleri için belirli bir dil, SDK, güvenlik uzmanlığı ve hatta yazmanız gereken kodlar gerekmez.
  • Microsoft Entra ID, Facebook, Google ve X gibi birden çok sağlayıcıyla tümleştirebilirsiniz.

Kimlik sağlayıcıları

Container Apps, bir üçüncü taraf kimlik sağlayıcısının kullanıcı kimliklerini ve kimlik doğrulama akışını sizin için yönettiği federasyon kimliğini kullanır. Aşağıdaki kimlik sağlayıcıları varsayılan olarak kullanılabilir:

Provider Oturum açma uç noktası Nasıl Yapılır kılavuzu
Microsoft kimlik platformu /.auth/login/aad Microsoft kimlik platformu
Facebook /.auth/login/facebook Facebook
GitHub /.auth/login/github GitHub
Google /.auth/login/google Google
X /.auth/login/x X
Herhangi bir OpenID Connect sağlayıcısı /.auth/login/<providerName> OpenID Connect

Bu sağlayıcılardan birini kullandığınızda, oturum açma uç noktası sağlayıcıdan kullanıcı kimlik doğrulaması ve kimlik doğrulama belirteci doğrulaması için kullanılabilir. Kullanıcılarınıza istediğiniz sayıda sağlayıcı seçeneği sağlayabilirsiniz.

Yerleşik kimlik doğrulamasını kullanma konusunda dikkat edilmesi gerekenler

Bu özellik yalnızca HTTPS ile kullanılmalıdır. Kapsayıcı uygulamanızın giriş yapılandırmasında devre dışı bırakıldığından emin olun allowInsecure .

Site içeriğinize ve API'lerinize erişimi kısıtlayarak veya kısıtlamadan kapsayıcı uygulamanızı kimlik doğrulaması için yapılandırabilirsiniz. Uygulama erişimini yalnızca kimliği doğrulanmış kullanıcılarla kısıtlamak için Erişimi kısıtla ayarını Kimlik doğrulaması gerektir olarak ayarlayın. Kimlik doğrulaması yapmak ancak erişimi kısıtlamamak için Erişimi kısıtla ayarını Kimliği doğrulanmamış erişime izin ver olarak ayarlayın.

Varsayılan olarak, her kapsayıcı uygulaması kimlik doğrulaması için kendi benzersiz tanımlama bilgisini veya belirtecini oluşturur. Ayrıca kendi imzalama ve şifreleme anahtarlarınızı da sağlayabilirsiniz.

Özellik mimarisi

Kimlik doğrulama ve yetkilendirme ara yazılımı bileşeni, platformunun uygulamanızdaki her çoğaltmada sepet kapsayıcısı olarak çalışan bir özelliğidir. Etkinleştirildiğinde, uygulamanız güvenlik katmanından geçtikten sonra gelen her HTTP isteğini işler.

Uygulama kapsayıcısına gelen trafiğe izin vermeden önce kimlik sağlayıcılarıyla etkileşim kuran bir sepet kapsayıcısı tarafından kesilen istekleri gösteren mimari diyagramı

Platform ara yazılımı, uygulamanız için çeşitli işlemleri işler:

  • Belirtilen kimlik sağlayıcılarıyla kullanıcıların ve istemcilerin kimliğini doğrular
  • Kimliği doğrulanmış oturumu yönetir
  • KIMLIK bilgilerini HTTP isteği üst bilgilerine ekler

Kimlik doğrulama ve yetkilendirme modülü, uygulama kodunuzdan yalıtılmış ayrı bir kapsayıcıda çalışır. Güvenlik kapsayıcısı işlem sırasında çalışmadığından, belirli dil çerçeveleriyle doğrudan tümleştirme mümkün değildir. Ancak, uygulamanızın ihtiyaç duyduğu ilgili bilgiler bu makalede açıklandığı gibi istek üst bilgilerinde sağlanır.

Kimlik doğrulama akışı

Kimlik doğrulama akışı tüm sağlayıcılar için aynıdır, ancak sağlayıcının SDK'sıyla oturum açmak isteyip istemediğinize bağlı olarak değişir:

  • Sağlayıcı SDK'sı olmadan (sunucu tarafından yönlendirilen akış veya sunucu akışı): Uygulama, Container Apps'te federasyon oturum açma temsilcilerini verir. Temsilci seçme genellikle sağlayıcının oturum açma sayfasını kullanıcıya sunan tarayıcı uygulamaları için geçerlidir.

  • Sağlayıcı SDK'sı (istemci tarafından yönlendirilen akış veya istemci akışı) ile: Uygulama, kullanıcıları sağlayıcıda el ile imzalar ve doğrulama için kimlik doğrulama belirtecini Container Apps'e gönderir. Bu yaklaşım, sağlayıcının oturum açma sayfasını kullanıcıya sunmayan tarayıcısız uygulamalar için tipiktir. Örneğin, sağlayıcının SDK'sını kullanarak kullanıcıları imzalayan yerel bir mobil uygulamadır.

Container Apps'teki güvenilir bir tarayıcı uygulamasından Container Apps'teki başka bir REST API'ye yapılan çağrıların kimliği, sunucu tarafından yönlendirilen akış kullanılarak doğrulanabilir. Daha fazla bilgi için bkz . Oturum açmayı ve oturumu kapatmayı özelleştirme.

Tabloda, kimlik doğrulama akışının adımları gösterilir.

Adım Sağlayıcı SDK'sı olmadan Sağlayıcı SDK'sı ile
1. Oturum açma İstemciyi öğesine /.auth/login/<PROVIDER>yönlendirir. İstemci kodu, kullanıcıyı doğrudan sağlayıcının SDK'sıyla imzalar ve bir kimlik doğrulama belirteci alır. Bilgi için sağlayıcının belgelerine bakın.
2. Kimlik doğrulaması sonrası Sağlayıcı istemcisini öğesine /.auth/login/<PROVIDER>/callbackyönlendirir. İstemci kodu doğrulama için belirteci sağlayıcıdan adresine /.auth/login/<PROVIDER> postalar.
3. Kimliği doğrulanmış oturum oluşturma Container Apps yanıta kimliği doğrulanmış tanımlama bilgisi ekler. Container Apps, istemci koduna kendi kimlik doğrulama belirtecini döndürür.
4. Kimliği doğrulanmış içerik sunma İstemci, sonraki isteklerde kimlik doğrulama tanımlama bilgisini içerir (tarayıcı tarafından otomatik olarak işlenir). İstemci kodu, kimlik doğrulama belirtecini üst bilgide X-ZUMO-AUTH sunar.

İstemci tarayıcıları için, Container Apps kimliği doğrulanmamış tüm kullanıcıları otomatik olarak öğesine /.auth/login/<PROVIDER>yönlendirebilir. Kullanıcılara, tercih ettikleri sağlayıcıyı kullanarak uygulamanızda oturum açmak için bir veya daha fazla /.auth/login/<PROVIDER> bağlantı da sunabilirsiniz.

Yetkilendirme davranışı

Azure portalında kapsayıcı uygulamanızın kimlik doğrulama ayarlarını düzenleyerek gelen bir isteğin kimliği doğrulanmamışsa bunu çeşitli davranışlarla yapılandırabilirsiniz. Aşağıdaki başlıklarda seçenekler açıklanmaktadır.

  • Kimliği doğrulanmamış erişime izin ver: Bu seçenek, uygulama kodunuz için kimliği doğrulanmamış trafiğin yetkilendirmesini engeller. Kimliği doğrulanmış istekler için Container Apps, HTTP üst bilgilerinde kimlik doğrulama bilgilerini de geçirir. Uygulamanız, bir istek için yetkilendirme kararları almak için üst bilgilerdeki bilgileri kullanabilir.

    Bu seçenek anonim istekleri işleme konusunda daha fazla esneklik sağlar. Örneğin, kullanıcılarınıza birden çok oturum açma sağlayıcısı sunmanızı sağlar. Ancak kod yazmanız gerekir.

  • Kimlik doğrulaması gerektir: Bu seçenek, uygulamanıza yönelik kimliği doğrulanmamış trafiği reddeder. Bu reddetme, yapılandırılan kimlik sağlayıcılarından birine yeniden yönlendirme eylemi olabilir. Böyle durumlarda, seçtiğiniz sağlayıcı için bir tarayıcı istemcisine /.auth/login/<PROVIDER> yönlendirilir. Anonim istek yerel bir mobil uygulamadan geliyorsa, döndürülen yanıt bir HTTP 401 Unauthorizedolur. Reddetmeyi tüm istekler için veya HTTP 403 Forbidden olacak HTTP 401 Unauthorized şekilde de yapılandırabilirsiniz.

    Bu seçenekle, uygulamanıza herhangi bir kimlik doğrulama kodu yazmanız gerekmez. Role özgü yetkilendirme gibi daha hassas yetkilendirme, kullanıcının talepleri incelenerek işlenebilir (bkz . Kullanıcı taleplerine erişme).

    Dikkat

    Erişimi bu şekilde kısıtlamak, uygulamanıza yapılan tüm çağrılar için geçerlidir. Bu, birçok tek sayfalı uygulamada olduğu gibi genel kullanıma açık bir giriş sayfası isteyen uygulamalar için de istenmeyebilir.

    Not

    Varsayılan olarak, Microsoft Entra kiracınızdaki tüm kullanıcılar Microsoft Entra Id'den uygulamanız için bir belirteç isteyebilir. Uygulamanıza erişimi, tanımlı kullanıcı grubuyla kısıtlamak istiyorsanız uygulamayı Microsoft Entra ID'de yapılandırabilirsiniz.

Oturum açmayı özelleştirme ve oturumu kapatma

Container Apps Kimlik Doğrulaması, oturum açma ve oturumu kapatma için yerleşik uç noktalar sağlar. Özellik etkinleştirildiğinde, bu uç noktalar kapsayıcı uygulamanızdaki yol ön eki altında /.auth kullanılabilir.

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

Portal yapılandırması, kullanıcılarınıza birden çok oturum açma sağlayıcısı (hem Facebook hem de X gibi) 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/x">Log in with X</a>

Kullanıcı bağlantılardan birini seçtiğinde, ilgili sağlayıcıların kullanıcı arabirimi kullanıcıya görüntülenir.

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. Uygulama kodu daha sonra, http POST isteği kullanarak doğrulama için elde edilen kimlik doğrulama belirtecini Container Apps'e gönderir (bkz . Kimlik doğrulama akışı).

Sağlayıcı belirtecini doğrulamak için kapsayıcı 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://<hostname>.azurecontainerapps.io/.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. Değer authorization_code 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":"<ACCES_TOKEN_SECRET>"}

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://<hostname>.azurecontainerapps.io/api/products/1
X-ZUMO-AUTH: <authenticationToken_value>

Oturumu kapatma

Kullanıcılar, uygulamanın /.auth/logout uç noktasına istek GET göndererek oturumu kapatabilir. İstek GET aşağıdaki eylemleri gerçekleştirir:

  • 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ı oturumu kapatma işlemi gerçekleştirir.

Bir web sayfasında basit bir oturumu kapatma bağlantısı aşağıdadır:

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

Varsayılan olarak, başarılı bir oturumu kapatma, istemciyi URL'ye /.auth/logout/doneyö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_urikodlamayı unutmayın.

Tam URL'ler kullanılırken URL aynı etki alanında barındırılmalıdır.

Uygulama kodunda kullanıcı taleplerine erişme

Tüm dil çerçeveleri için Container Apps, gelen belirteçteki talepleri uygulama kodunuz için kullanılabilir hale getirir. Talepler, kimliği doğrulanmış bir son kullanıcıdan veya istemci uygulamasından gelen istek üst bilgilerine eklenir. Dış isteklerin bu üst bilgileri ayarlamasına izin verilmez, bu nedenle yalnızca Container Apps tarafından ayarlanmışsa sunulur. Bazı örnek üst bilgiler şunlardır:

  • X-MS-CLIENT-PRINCIPAL-NAME
  • X-MS-CLIENT-PRINCIPAL-ID

Herhangi bir dilde veya çerçevede yazılmış kod, bu üst bilgilerden ihtiyaç duyduğu bilgileri alabilir.

Not

Farklı dil çerçeveleri bu üst bilgileri uygulama koduna küçük harf veya başlık büyük/küçük harf gibi farklı biçimlerde sunabilir.

Sonraki adımlar

Kapsayıcı uygulamanızın güvenliğini sağlama hakkında ayrıntılı bilgi için aşağıdaki makalelere bakın.