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 |
/.auth/login/facebook |
||
GitHub | /.auth/login/github |
GitHub |
/.auth/login/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.
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>/callback yö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 birHTTP 401 Unauthorized
olur. Reddetmeyi tüm istekler için veyaHTTP 403 Forbidden
olacakHTTP 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_token ve expires_in özellikleri isteğe bağlıdır. |
microsoftaccount |
{"access_token":"<ACCESS_TOKEN>"} veya {"authentication_token": "<TOKEN>" |
authentication_token yerine access_token tercih 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/done
yö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_uri
kodlamayı 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.