Grupları ve grup taleplerini kullanarak Java JBoss EAP uygulamalarının güvenliğini sağlama

Bu makale, kullanıcıların Java için Microsoft Authentication Library (MSAL) ile oturum açmasını sağlayan bir Java JBoss EAP uygulamasının nasıl oluşturulacağını gösterir. Uygulama ayrıca Microsoft Entra ID güvenlik grubu üyeliğine göre sayfalara erişimi kısıtlar.

Aşağıdaki diyagramda uygulamanın topolojisi gösterilmektedir:

Uygulamanın topolojisini gösteren diyagram.

İstemci uygulaması, kullanıcıların bir Microsoft Entra ID kiracısında oturum açmasını sağlamak ve Microsoft Entra ID'den bir ID belirteci almak için Java için MSAL'ı (MSAL4J) kullanır. Kimlik belirteci, bir kullanıcının bu kiracıyla kimliğinin doğrulandığını kanıtlar. Uygulama, kullanıcının kimlik doğrulaması durumuna ve grup üyeliğine göre yollarını korur.

Bu senaryoyu ele alan bir video için bkz. Uygulama rollerini, güvenlik gruplarını, kapsamları ve dizin rollerini kullanarak uygulamalarınızda yetkilendirmeyi uygulama.

Önkoşullar

  • JDK sürümü 8 veya üzeri
  • Maven 3
  • Microsoft Entra ID kiracısı. Daha fazla bilgi için bkz. Microsoft Entra ID kiracısı edinme.
  • Kendi Microsoft Entra ID kiracınızda bulunan bir kullanıcı hesabı.
  • Test etmek istediğiniz kullanıcıları içeren iki güvenlik grubu: ve .
  • JBoss EAP
  • Visual Studio Code
  • Visual Studio Code için Azure Araçları

Öneriler

  • Java / Jakarta Servlet’leri hakkında biraz bilgi sahibi olmak.
  • Linux/OSX terminali hakkında biraz bilgi.
  • Belirteçlerinizi incelemek için jwt.ms.
  • Ağ etkinliğinizi izlemek ve sorun gidermek için Fiddler.
  • En son gelişmelerden haberdar olmak için Microsoft Entra Blogu'nu takip edin.

Örneği kurun

Aşağıdaki bölümlerde örnek uygulamanın nasıl ayarlanacağı gösterilmektedir.

Örnek depoyu kopyalama veya indirme

Örneği kopyalamak için bir Bash penceresi açın ve aşağıdaki komutu kullanın:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/3-Authorization-II/groups

Alternatif olarak, ms-identity-msal-java-samples deposuna gidin, ardından .zip dosyası olarak indirin ve sabit sürücünüze ayıklayın.

Önemli

Windows'ta dosya yolu uzunluğu sınırlamalarını önlemek için depoyu sabit sürücünüzün köküne yakın bir dizine kopyalayın veya ayıklayın.

Örnek uygulamayı Microsoft Entra ID kiracınıza kaydedin

Bu örnekte bir proje var. Aşağıdaki bölümlerde, Azure portalını kullanarak uygulamayı nasıl kaydedeceğiniz gösterilmektedir.

Uygulamalarınızı oluşturmak istediğiniz Microsoft Entra ID kiracısını seçin

Kiracınızı seçmek için aşağıdaki adımları kullanın:

  1. Azure Portal’ında oturum açın.

  2. Hesabınız birden fazla Microsoft Entra ID kiracısında varsa Azure portalının köşesindeki profilinizi seçin ve ardından Dizini değiştir'i seçerek oturumunuzu istediğiniz Microsoft Entra ID kiracısına değiştirin.

Uygulamayı kaydedin (java-servlet-webapp-groups)

İlk olarak, Hızlı Başlangıç: Microsoft kimlik platformuyla bir uygulama kaydetme bölümündeki yönergeleri izleyerek Azure portalında yeni bir uygulama kaydedin.

Ardından kaydı tamamlamak için aşağıdaki adımları kullanın:

  1. Geliştiriciler için Microsoft kimlik platformundaki Uygulama kayıtları sayfasına gidin.

  2. Yeni kayıt öğesini seçin.

  3. Görüntülenen Uygulamayı kaydet sayfasında aşağıdaki uygulama kayıt bilgilerini girin:

    • Ad bölümünde, uygulama kullanıcılarına gösterilecek anlamlı bir uygulama adı girin - örneğin, .
    • Desteklenen hesap türleri'nin altında Yalnızca bu kuruluş dizinindeki Hesaplar'ı seçin.
    • Redirect URI bölümünde, açılır kutuda Web seçeneğini belirleyin ve aşağıdaki yeniden yönlendirme URI’sini girin: .
  4. Uygulamayı kaydetmek için Kaydet'i seçin.

  5. Uygulamanın kayıt sayfasında, daha sonra kullanmak üzere Uygulama (istemci) kimliği değerini bulun ve kopyalayın. Bu değeri uygulamanızın yapılandırma dosyasında veya dosyalarında kullanırsınız.

  6. Yaptığınız değişiklikleri kaydetmek için Kaydet'i seçin.

  7. Uygulamanın kayıt sayfasında, gizli diziler oluşturabileceğiniz ve sertifikaları yükleyebileceğiniz sayfayı açmak için gezinti bölmesinden Sertifikalar & gizli diziler seçeneğini belirleyin.

  8. Gizli anahtarlar bölümünün altında, Yeni gizli anahtar'ı seçin.

  9. Bir açıklama yazın - örneğin, app secret.

  10. Sır için bir son kullanma tarihi seçin veya özel bir geçerlilik süresi belirtin. İstemci gizli anahtarları en fazla 24 aylık bir geçerlilik süresiyle sınırlıdır ve Microsoft, 12 aydan kısa bir sona erme süresi önerir. Üretim uygulamaları için istemci parolası yerine sertifika veya federe kimlik bilgisi tercih edin.

  11. Ekle'yi seçin. Oluşturulan değer görüntülenir.

  12. Oluşturulan değeri kopyalayıp sonraki adımlarda kullanmak üzere kaydedin. Kodunuzun yapılandırma dosyaları için bu değere ihtiyacınız vardır. Bu değer yeniden görüntülenmez ve başka bir yolla alamazsınız. Bu nedenle, başka bir ekrana veya bölmeye gitmeden önce Azure portalından kaydettiğinizden emin olun.

  13. Uygulamanın kayıt sayfasında, uygulamanızın ihtiyaç duyduğu API'lere erişim eklemek üzere sayfayı açmak için gezinti bölmesinden API izinleri'ni seçin.

  14. İzin ekle'yi seçin.

  15. Microsoft API'leri sekmesinin seçili olduğundan emin olun.

  16. Yaygın kullanılan Microsoft API'leri bölümünde Microsoft Graph'ı seçin.

  17. Temsilci izinleri bölümünde, listeden User.Read ve GroupMember.Read.All'ı seçin. Gerekirse arama kutusunu kullanın.

  18. İzinler ekle'yi seçin.

  19. yönetici onayı gerektirir; bu nedenle {tenant} için yönetici onayı ver/geri çek seçeneğini belirleyin ve ardından kiracıdaki tüm hesaplar için istenen izinlere onay vermek isteyip istemediğiniz sorulduğunda Evet seçeneğini belirleyin. Bu eylemi gerçekleştirmek için Microsoft Entra Id kiracı yöneticisi olmanız gerekir.


Uygulamayı (java-servlet-webapp-groups) uygulama kaydınızı kullanacak şekilde yapılandırma

Uygulamayı yapılandırmak için aşağıdaki adımları kullanın:

Not

Aşağıdaki adımlarda, , veya ile aynıdır.

  1. Projeyi IDE'nizde açın.

  2. ./src/main/resources/authentication.properties dosyasını açın.

  3. dizesini bulun. Uygulamanızı Yalnızca bu kuruluş dizinindeki hesaplar seçeneğiyle kaydettiyseniz mevcut değeri Microsoft Entra kiracı kimliğinizle değiştirin.

  4. dizesini bulun ve mevcut değeri Azure portalından kopyalanan uygulamasının uygulama kimliği veya ile değiştirin.

  5. dizesini bulun ve mevcut değeri, Azure portalında uygulamasını oluştururken kaydettiğiniz değerle değiştirin.

Güvenlik gruplarını yapılandırma

Uygulamalarınızı grup talebi alacak şekilde nasıl daha fazla yapılandırabileceğinize ilişkin aşağıdaki seçenekleri kullanabilirsiniz:

  • İç içe yerleştirilmiş gruplar dahil bir Microsoft Entra ID kiracısında oturum açmış kullanıcının atandığı tüm grupları alın. Daha fazla bilgi için, iç içe gruplar da dahil olmak üzere oturum açmış kullanıcının atandığı tüm grupları alacak şekilde uygulamanızı yapılandırma bölümüne bakın.

  • Uygulamanızın çalışmak üzere programlandığı filtrelenmiş bir grup kümesinden grup talep değerlerini alın. Daha fazla bilgi için, Bir kullanıcının atanmış olabileceği filtrelenmiş grup kümesinden grup talebi değerlerini alacak şekilde uygulamanızı yapılandırma bölümüne bakın. Bu seçenek Microsoft Entra ID Free sürümünde kullanılamaz.

Not

Grup kimliği yerine şirket içi grubun veya değerini almak için, Microsoft Entra ID kullanarak uygulamalar için grup taleplerini yapılandırma içindeki Active Directory’den eşitlenen grup özniteliklerini kullanmaya yönelik önkoşullar bölümüne bakın.

Uygulamanızı, iç içe yerleştirilmiş gruplar da dahil olmak üzere oturum açmış kullanıcının atandığı tüm grupları alacak şekilde yapılandırın

Uygulamanızı yapılandırmak için aşağıdaki adımları kullanın:

  1. Uygulamanın kayıt sayfasında, uygulamanıza verilen belirteçlerde sağlanan talepleri yapılandırabileceğiniz sayfayı açmak için gezinti bölmesinde Token Configuration seçeneğini belirleyin.

  2. Gruplar Talebini Düzenle ekranını açmak için Gruplar Talebi Ekle'yi seçin.

  3. Güvenlik grupları VEYA Tüm gruplar (dağıtım listelerini içerir ancak uygulamaya atanan grupları içermez) seçeneğini belirleyin. Her iki seçeneğin de seçilmesi, Güvenlik Grupları seçeneğinin etkisini azaltır.

  4. Kimlik bölümünde Grup Kimliği'ni seçin. Bu seçim, Microsoft Entra ID'nin, bir kullanıcı oturum açtıktan sonra uygulamanızın aldığı ID token içindeki groups talebinde, kullanıcının atandığı grupların object ID'sini göndermesine neden olur.

Uygulamanızı, bir kullanıcının atanabileceği filtrelenmiş bir grup kümesinden grup talep değerlerini alacak şekilde yapılandırın

Bu seçenek, aşağıdaki durumlar doğru olduğunda kullanışlıdır:

  • Uygulamanız, oturum açma kullanıcısının atanabileceği seçili bir grup kümesiyle ilgileniyor.
  • Uygulamanız, bu kullanıcının kiracıda atandığı her güvenlik grubuyla ilgilenmez.

Bu seçenek, uygulamanızın overage sorununu önlemesine yardımcı olur.

Not

Bu özellik Microsoft Entra ID Free sürümünde kullanılamaz.

Bu seçeneği kullandığınızda iç içe grup atamaları kullanılamaz.

Bu seçeneği uygulamanızda etkinleştirmek için aşağıdaki adımları kullanın:

  1. Uygulamanın kayıt sayfasında, uygulamanıza verilen belirteçlerde sağlanan talepleri yapılandırabileceğiniz sayfayı açmak için gezinti bölmesinde Token Configuration seçeneğini belirleyin.

  2. Gruplar Talebini Düzenle ekranını açmak için Gruplar Talebi Ekle'yi seçin.

  3. Uygulamaya atanan gruplar'ı seçin.

    Güvenlik Grupları veya Tüm gruplar (dağıtım listelerini içerir ancak uygulamaya atanan grupları içermez) gibi diğer seçeneklerin seçilmesi, uygulamanızın bu seçeneği kullanmak için seçimden türetdiği avantajları engeller.

  4. Kimlik bölümünde Grup Kimliği'ni seçin. Bu seçim, Microsoft Entra ID'nin kullanıcının atandığı grupların nesne kimliğini, ID belirtecinin groups talebinde göndermesine neden olur.

  5. Api'yi kullanıma sunma seçeneğini kullanarak bir web API'sini kullanıma sunarsanız, Erişim bölümünün altındaki Grup Kimliği seçeneğini de belirleyebilirsiniz. Bu seçenek, Microsoft Entra ID’nin kullanıcının atandığı grupların nesne kimliğini, erişim belirteci içindeki gruplar talebinde göndermesiyle sonuçlanır.

  6. Uygulamanın kayıt sayfasında, uygulamaya genel bakış ekranını açmak için gezinti bölmesinde Genel Bakış'ı seçin.

  7. Yerel dizindeki Yönetilen uygulama bölümünde uygulamanızın adını içeren köprüyü seçin. Bu alan başlığı kısaltılabilir - örneğin . Bu bağlantıyı seçtiğinizde, oluşturduğunuz kiracıda uygulamanızın hizmet sorumlusuyla ilişkili Kurumsal Uygulamaya Genel Bakış sayfasına gidersiniz. Tarayıcınızın geri düğmesini kullanarak uygulama kayıt sayfasına geri gidebilirsiniz.

  8. Uygulamanıza kullanıcı ve grup atayabileceğiniz sayfayı açmak için gezinti bölmesinde Kullanıcılar ve gruplar'ı seçin.

  9. Kullanıcı ekle'yi seçin.

  10. Sonuç ekranından Kullanıcı ve Gruplar'ı seçin.

  11. Bu uygulamaya atamak istediğiniz grupları seçin.

  12. Grupları seçmeyi bitirmek için Seç'i seçin.

  13. Grup atama işlemini tamamlamak için Ata seçin.

    Uygulamanızda oturum açan bir kullanıcı, atanmış bu gruplardan bir veya daha fazlasının üyesiyse, uygulamanız artık bu seçili grupları groups talebinde alır.

  14. Uygulamanızın temel özelliklerini listeleyen sayfayı açmak için gezinti bölmesinde Özellikler'i seçin. Kullanıcı ataması gerekli mi? bayrağını Evet olarak ayarlayın.

Önemli

Kullanıcı ataması gerekli mi? seçeneğini Evet olarak ayarladığınızda, Microsoft Entra ID yalnızca Kullanıcılar ve gruplar bölmesinde uygulamanıza atanan kullanıcıların uygulamanızda oturum açabilmesini denetler. Kullanıcıları doğrudan veya ait oldukları güvenlik gruplarını atayarak atayabilirsiniz.

Uygulamayı (java-servlet-webapp-groups) grup kimliklerini tanıyacak şekilde yapılandırma

Uygulamayı yapılandırmak için aşağıdaki adımları kullanın:

Önemli

Belirteç Yapılandırması sayfasında, groupID dışında herhangi bir seçenek seçtiyseniz — örneğin DNSDomain\sAMAccountName — aşağıdaki adımlarda nesne kimliği yerine grup adını girmelisiniz; örneğin .

  1. ./src/main/resources/authentication.properties dosyasını açın.

  2. dizesini bulun ve mevcut değeri, Azure portalından kopyaladığınız grubunun nesne kimliğiyle değiştirin. Yer tutucu değerinden süslü parantezleri de kaldırın.

  3. dizesini bulun ve mevcut değeri, Azure portalından kopyaladığınız grubunun nesne kimliğiyle değiştirin. Yer tutucu değerinden süslü parantezleri de kaldırın.

Örneği oluşturma

Örneği Maven kullanarak derlemek için, örneğe ait pom.xml dosyasını içeren dizine gidin ve ardından aşağıdaki komutu çalıştırın:

mvn clean package

Bu komut, çeşitli uygulama sunucularında çalıştırabileceğiniz bir .war dosyası oluşturur.

Örneği çalıştırma

  • Azure App Service'e dağıtın
  • Yerel olarak çalıştır

Aşağıdaki bölümlerde, örneğin Azure Uygulaması Hizmetine nasıl dağıtılacağı gösterilmektedir.

Önkoşullar

  • Azure App Service uygulamaları için Maven Eklentisi

    Maven tercih ettiğiniz geliştirme aracı değilse, diğer araçları kullanan aşağıdaki benzer öğreticilere bakın:

    • IntelliJ IDEA
    • Eclipse
    • Visual Studio Code

Maven eklentisini yapılandırma

Azure Uygulaması Hizmeti'ne dağıtım işlemi, Azure CLI'dan azure kimlik bilgilerinizi otomatik olarak kullanır. Azure CLI yerel olarak yüklü değilse Maven eklentisi OAuth veya cihaz oturum açma ile kimlik doğrulaması yapar. Daha fazla bilgi için Maven eklentileriyle kimlik doğrulaması konusuna bakın.

Eklentiyi yapılandırmak için aşağıdaki adımları kullanın:

  1. Dağıtımı yapılandırmak için yanında gösterilen Maven komutunu çalıştırın. Bu komut App Service işletim sistemini, Java sürümünü ve Tomcat sürümünü ayarlamanıza yardımcı olur.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
    
  2. Yeni çalıştırma yapılandırması oluşturmak için Y tuşuna basın, ardından Enter tuşuna basın.

  3. OS için değer tanımla seçeneğinde, Linux için 2 tuşuna basın, ardından Enter tuşuna basın.

  4. javaVersion için bir değer tanımla için, Java 11 için 2'ye basın, ardından Enter'a basın.

  5. webContainer için değer tanımla için, JBosseap7 için 1 tuşuna basın, ardından Enter tuşuna basın.

  6. pricingTier için değer tanımla alanında, varsayılan P1v3 katmanını seçmek için Enter tuşuna basın.

  7. Onaylamak için Y tuşuna basın, ardından Enter tuşuna basın.

Aşağıdaki örnekte dağıtım işleminin çıkışı gösterilmektedir:

Please confirm webapp properties
AppName : msal4j-servlet-auth-1707220080695
ResourceGroup : msal4j-servlet-auth-1707220080695-rg
Region : centralus
PricingTier : P1v3
OS : Linux
Java Version: Java 11
Web server stack: JBosseap 7
Deploy to slot : false
Confirm (Y/N) [Y]:
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  26.196 s
[INFO] Finished at: 2024-02-06T11:48:16Z
[INFO] ------------------------------------------------------------------------

Seçimlerinizi onayladıktan sonra eklenti, uygulamanızı Azure Uygulaması Hizmetinde çalışacak şekilde yapılandırmak için eklenti yapılandırmasını ve gerekli ayarları projenizin pom.xml dosyasına ekler.

pom.xml dosyasının ilgili bölümü aşağıdaki örneğe benzer olmalıdır:

<build>
    <plugins>
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>>azure-webapp-maven-plugin</artifactId>
            <version>x.xx.x</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <resourceGroup>your-resourcegroup-name</resourceGroup>
                <appName>your-app-name</appName>
            ...
            </configuration>
        </plugin>
    </plugins>
</build>

App Service yapılandırmalarını doğrudan pom.xml değiştirebilirsiniz. Bazı yaygın yapılandırmalar aşağıdaki tabloda listelenmiştir:

Özellik Zorunlu Açıklama Sürüm
schemaVersion yanlış Yapılandırma şemasının sürümü. Desteklenen değerler ve şeklindedir. 1.5.2
subscriptionId yanlış Abonelik kimliği. 0.1.0+
resourceGroup true Uygulamanızın Azure kaynak grubu. 0.1.0+
appName true Uygulamanızın adı. 0.1.0+
region yanlış Uygulamanızın barındırıldığı bölge. Varsayılan değer 'dır. Geçerli bölgeler için bkz. Desteklenen Bölgeler. 0.1.0+
pricingTier yanlış Uygulamanızın fiyatlandırma katmanı. Üretim iş yükü için varsayılan değer P1v2'dir. Java geliştirme ve testi için önerilen minimum değer değeridir. Daha fazla bilgi için bkz. App Service Fiyatlandırması 0.1.0+
runtime yanlış Çalışma zamanı ortamının yapılandırması. Daha fazla bilgi için, Yapılandırma Ayrıntıları bölümüne bakın. 0.1.0+
deployment yanlış Dağıtım yapılandırması. Daha fazla bilgi için, Yapılandırma Ayrıntıları bölümüne bakın. 0.1.0+

Yapılandırmaların tam listesi için eklenti başvuru belgelerine bakın. Tüm Azure Maven eklentileri ortak bir yapılandırma kümesini paylaşır. Bu yapılandırmalar için Ortak Yapılandırmalar bölümüne bakın. Azure App Service'e özgü yapılandırmalar için Azure uygulaması: Yapılandırma Ayrıntıları konusuna bakın.

Daha sonra kullanmak üzere ve değerlerini sakladığınızdan emin olun.

Uygulamayı dağıtım için hazırlama

Uygulamanızı App Service'e dağıttığınızda, yeniden yönlendirme URL'niz dağıtılan uygulama örneğinizin yeniden yönlendirme URL'sine dönüşür. Özellikler dosyanızdaki bu ayarları değiştirmek için aşağıdaki adımları kullanın:

  1. Aşağıdaki örnekte gösterildiği gibi uygulamanızın authentication.properties dosyasına gidin ve değerini dağıttığınız uygulamanın etki alanı adı olarak değiştirin. Örneğin, önceki adımda uygulama adınız için seçtiyseniz, şimdi değeri için kullanmanız gerekir. Protokolü de 'den 'e değiştirdiğinizden emin olun.

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<your-app-name>.azurewebsites.net
    
  2. Bu dosyayı kaydettikten sonra uygulamanızı yeniden derlemek için aşağıdaki komutu kullanın:

    mvn clean package
    

Önemli

Bu aynı authentication.properties dosyasında, için bir ayar bulunur. Bu değeri App Service'e dağıtmak iyi bir uygulama değildir. Bu değeri kodunuzda bırakmak ve git deponuza göndermeniz de iyi bir uygulama değildir. Bu gizli değeri kodunuzdan kaldırmak için, App Service'e Dağıtma - Gizli değeri kaldırma bölümünde daha ayrıntılı yönergeler bulabilirsiniz. Bu kılavuzda, gizli değeri Key Vault'a aktarmak ve Key Vault Başvuruları'nı kullanmak için ek adımlar yer alır.

Microsoft Entra ID uygulama kaydınızı güncelleştirme

Yeniden yönlendirme URI'si dağıtılan uygulamanızda Azure Uygulaması Hizmeti'ne değiştiğinden, Microsoft Entra Id uygulama kaydınızdaki yeniden yönlendirme URI'sini de değiştirmeniz gerekir. Bu değişikliği yapmak için aşağıdaki adımları kullanın:

  1. Geliştiriciler için Microsoft kimlik platformundaki Uygulama kayıtları sayfasına gidin.

  2. Uygulama kaydınızı aramak için arama kutusunu kullanın - örneğin, .

  3. Adını seçerek uygulama kaydınızı açın.

  4. Menüden Kimlik Doğrulaması'nı seçin.

  5. WebYeniden Yönlendirme URI'leri bölümünde URI Ekle seçeneğini belirleyin.

  6. Uygulamanızın URI'sini girin ve sonuna ekleyin; örneğin, .

  7. Kaydet'i seçin.

Uygulamayı yayınla

Artık uygulamanızı Azure Uygulaması Hizmeti'ne dağıtmaya hazırsınız. Dağıtımı yürütmek üzere Azure ortamınızda oturum açtığınızdan emin olmak için aşağıdaki komutu kullanın:

az login

pom.xml dosyanızda tüm yapılandırma hazır olduğunda, java uygulamanızı Azure'a dağıtmak için aşağıdaki komutu kullanabilirsiniz:

mvn package azure-webapp:deploy

Dağıtım tamamlandıktan sonra uygulamanız adresinde hazırdır. URL’yi yerel web tarayıcınızda açın; burada uygulamasının başlangıç sayfasını görmelisiniz.

Örneği keşfedin

Örneği keşfetmek için aşağıdaki adımları kullanın:

  1. Ekranın ortasında oturum açma veya oturum kapatma durumunun görüntülendiğine dikkat edin.
  2. Köşedeki bağlama duyarlı düğmeyi seçin. Bu düğmenin üzerinde, uygulamayı ilk kez çalıştırdığınızda Oturum Aç yazar.
  3. Sonraki sayfada yönergeleri izleyin ve Microsoft Entra Id kiracısında bir hesapla oturum açın.
  4. Onay ekranında, istenen kapsamlara dikkat edin.
  5. Bağlama duyarlı düğmenin artık Oturumu kapat yazdığını ve kullanıcı adınızı görüntülediğini fark edin.
  6. ID belirtecinin çözümlenmiş claim’lerinden bazılarını görmek için ID Token Details seçeneğini belirleyin.
  7. Oturum açmış kullanıcının güvenlik grubu üyeliği hakkındaki bilgileri görmek için Gruplar'ı seçin.
  8. Groups claim ile korunan uç noktalara erişmek için Yalnızca Yönetici veya Normal Kullanıcı seçin.
    • Oturum açmış kullanıcı grubundaysa, kullanıcı her iki sayfaya da erişebilir.
    • Oturum açmış kullanıcı grubundaysa, kullanıcı yalnızca Normal Kullanıcı sayfasına erişebilir.
    • Oturum açmış olan kullanıcınız iki grupta da değilse, kullanıcı iki sayfadan ikisine de erişemez.
  9. Oturumu kapatmak için köşedeki düğmeyi kullanın.
  10. Oturumu kapattıktan sonra, kullanıcının yetkili olmadığı durumda uygulamanın ID belirteci claim’leri yerine hatasını görüntülediğini gözlemlemek için ID Token Details seçeneğini belirleyin.

Kod hakkında

Bu örnek, bir kullanıcının oturum açmasını sağlamak ve gruplar istemini içerebilecek bir kimlik belirteci almak için Java için MSAL’ı (MSAL4J) kullanır. Kimlik belirtecinde yayınlanmak üzere çok fazla grup varsa örnek, grup üyeliği verilerini Microsoft Graph'tan almak için Java için Microsoft Graph SDK'sını kullanır. Kullanıcının ait olduğu gruplara bağlı olarak, oturum açmış kullanıcı korumalı sayfalar olan ve öğelerinin hiçbirine, yalnızca birine veya her ikisine birden erişebilir.

Bu örneğin davranışını çoğaltmak istiyorsanız Maven kullanarak projelerinize MSAL4J ve Microsoft Graph SDK'sı eklemeniz gerekir. src/main/java/com/microsoft/azuresamples/msal4j klasöründeki pom.xml dosyasını ve helpers ile authservlets klasörlerinin içeriğini kopyalayabilirsiniz. Authentication.properties dosyasına da ihtiyacınız vardır. Bu sınıflar ve dosyalar, çok çeşitli uygulamalarda kullanabileceğiniz genel kodlar içerir. Örneğin geri kalanını da kopyalayabilirsiniz, ancak diğer sınıflar ve dosyalar bu örneğin amacını ele almak için özel olarak oluşturulur.

İçindekiler

Aşağıdaki tabloda örnek proje klasörünün içeriği gösterilmektedir:

Dosya/klasör Açıklama
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Bu dizin, uygulamanın arka uç iş mantığını tanımlayan sınıfları içerir.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Bu dizin, oturum açma ve oturumu kapatma uç noktaları için kullanılan sınıfları içerir.
*Servlet.java Kullanılabilir tüm uç noktalar, adları Servletile biten Java sınıflarında tanımlanır.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Kimlik doğrulaması için yardımcı sınıflar.
AuthenticationFilter.java Kimliği doğrulanmamış istekleri korumalı uç noktalara 401 sayfasına yönlendirir.
src/main/resources/authentication.properties Microsoft Entra ID ve program yapılandırması.
src/main/webapp/ Bu dizin kullanıcı arabirimini içerir - JSP şablonları
CHANGELOG.md Örnekteki değişikliklerin listesi.
CONTRIBUTING.md Örneğe katkıda bulunma yönergeleri.
LİSANS Örnek için lisans.

Fazla kullanım da dahil olmak üzere belirteçlerde grup talebi işleme

Aşağıdaki bölümlerde uygulamanın bir grup beyanını nasıl işlediği açıklanmaktadır.

Gruplar iddia ediyor

Oturum açmış kullanıcının üyesi olduğu güvenlik gruplarının nesne kimliği, aşağıdaki örnekte gösterilen belirtecin gruplar talebine döndürülür:

{
  ...
  "groups": [
    "0bbe91cc-b69e-414d-85a6-a043d6752215",
    "48931dac-3736-45e7-83e8-015e6dfd6f7c",]
  ...
}

Grupların fazla kullanım talebi

Belirteç boyutunun HTTP üst bilgi boyutu sınırlarını aşmadığından emin olmak için Microsoft kimlik platformu, grup talebine dahil olduğu nesne kimliklerinin sayısını sınırlar.

Fazla kullanım sınırı SAML belirteçleri için 150, JWT belirteçleri için 200 ve Tek Sayfalı uygulamalar için 6'dır. Bir kullanıcı fazla kullanım sınırından daha fazla gruba üyeyse, Microsoft kimlik platformu belirteçteki grup taleplerindeki grup kimliklerini yaymaz. Bunun yerine, aşağıdaki örnekte gösterildiği gibi, kullanıcının grup üyeliklerini almak için uygulamanın Microsoft Graph API'sini sorgulaması gerektiğini belirten bir aşım claim'i içerir:

{
  ...
  "_claim_names": {
    "groups": "src1"
    },
    {
   "_claim_sources": {
    "src1": {
        "endpoint":"[Graph Url to get this user's group membership from]"
        }
    }
  ...
}

Test için bu örnekte fazla kullanım senaryosu oluşturun

Fazla kullanım senaryosu oluşturmak için aşağıdaki adımları kullanabilirsiniz:

  1. Çok sayıda grup oluşturmak ve bunlara kullanıcı atamak için AppCreationScripts klasöründe sağlanan BulkCreateGroups.ps1 dosyasını kullanabilirsiniz. Bu dosya, geliştirme sırasında fazla kullanım senaryolarının testlerine yardımcı olur. BulkCreateGroups.ps1 betiğinde sağlanan kullanıcının öğesini değiştirmeyi unutmayın.

  2. Bu örneği çalıştırdığınızda ve fazla kullanım oluştuğunda, kullanıcı oturum açtığında ana sayfada _claim_names görürsünüz.

  3. Grup fazla kullanımlarıyla karşılaşmamak için mümkünse grup filtreleme özelliğini kullanmanızı kesinlikle öneririz. Daha fazla bilgi için, Bir kullanıcının atanmış olabileceği filtrelenmiş grup kümesinden grup talebi değerlerini alacak şekilde uygulamanızı yapılandırma bölümüne bakın.

  4. Grup aşımıyla karşılaşmaktan kaçınamıyorsanız, belirtecinizdeki gruplar talebini işlemek için aşağıdaki adımları kullanmanızı öneririz:

    1. Talep _claim_names'i,grupları içinde değerlerinden birine sahip olan olarak denetle. Bu talep fazla kullanım olduğunu gösterir.
    2. Bulunursa, kullanıcının gruplarını getirmek için _claim_sources'de belirtilen uç noktaya çağrı yapın.
    3. Hiçbiri bulunamazsa, kullanıcının ait olduğu gruplar için groups claim’ine bakın.

Not

Aşımın işlenmesi, oturum açmış kullanıcının grup üyeliklerini okumak için Microsoft Graph’a bir çağrı yapılmasını gerektirir; bu nedenle, getMemberObjects işlevinin başarıyla yürütülebilmesi için uygulamanızın GroupMember.Read.All iznine sahip olması gerekir.

Microsoft Graph programlama hakkında daha fazla bilgi için Geliştiriciler için Microsoft Graph'a giriş videosuna bakın.

ConfidentialClientApplication

Aşağıdaki örnekte gösterildiği gibi, AuthHelper.java dosyasında bir örneği oluşturulur. Bu nesne, Microsoft Entra yetkilendirme URL'sini oluşturmaya yardımcı olur ve ayrıca kimlik doğrulama belirtecini bir erişim belirteci için değiştirmesine yardımcı olur.

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                      .builder(CLIENT_ID, secret)
                      .authority(AUTHORITY)
                      .build();

Örnek oluşturma için aşağıdaki parametreler kullanılır:

  • Uygulamanın istemci kimliği.
  • Gizli İstemci Uygulamaları için gerekli olan istemci sırrı.
  • Microsoft Entra kiracı kimliğinizi içeren Microsoft Entra ID yetki adresi.

Bu örnekte, bu değerler Config.java dosyasındaki bir özellik okuyucu kullanılarak authentication.properties dosyasından okunur.

Adım adım gözden geçirme

Aşağıdaki adımlar, uygulamanın işlevselliğine ilişkin bir kılavuz sağlar:

  1. Oturum açma işleminin ilk adımı, Microsoft Entra ID kiracınızdaki uç noktasına bir istek göndermektir. MSAL4J örneği, bir yetkilendirme isteği URL'si oluşturmak için kullanılır. Uygulama, tarayıcıyı kullanıcının oturum açtığı bu URL'ye yönlendirir.

    final ConfidentialClientApplication client = getConfidentialClientInstance();
    AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES))
            .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString();
    contextAdapter.redirectUser(authorizeUrl);
    

    Aşağıdaki listede bu kodun özellikleri açıklanmaktadır:

    • : bir AuthorizationRequestUrl oluşturmak için ayarlanması gereken parametreler.
    • : Microsoft Entra’nın, kullanıcı kimlik bilgileri alındıktan sonra tarayıcıyı yetkilendirme koduyla birlikte yönlendirdiği yer. Azure portal içindeki Microsoft Entra ID uygulama kaydındaki yeniden yönlendirme URI'si ile eşleşmelidir.
    • : Kapsamlar, uygulama tarafından istenen izinlerdir.
      • Normalde, kimlik belirteci yanıtı almak için üç kapsam yeterlidir.
      • Uygulama tarafından istenen kapsamların tam listesi authentication.properties dosyasında bulunabilir. gibi daha fazla kapsam ekleyebilirsiniz.
  2. Kullanıcıya Microsoft Entra Id tarafından bir oturum açma istemi sunulur. Oturum açma girişimi başarılı olursa, kullanıcının tarayıcısı uygulamanın yeniden yönlendirme uç noktasına yönlendirilir. Bu uç noktaya yapılan geçerli bir istek, bir yetkilendirme kodu içerir.

  3. örneği daha sonra bu yetkilendirme kodu karşılığında Microsoft Entra ID'den bir kimlik belirteci ve erişim belirteci alır.

    // First, validate the state, then parse any error codes in response, then extract the authCode. Then:
    // build the auth code params:
    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
            .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build();
    
    // Get a client instance and leverage it to acquire the token:
    final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance();
    final IAuthenticationResult result = client.acquireToken(authParams).get();
    

    Aşağıdaki listede bu kodun özellikleri açıklanmaktadır:

    • : Kimlik belirteci ve/veya erişim belirteci almak için Yetkilendirme Kodunu kullanmak üzere ayarlanması gereken parametreler.
    • : Yeniden yönlendirme uç noktasında alınan yetkilendirme kodu.
    • : Önceki adımda kullanılan yönlendirme URI’si yeniden iletilmelidir.
    • : Önceki adımda kullanılan izin kapsamları yeniden iletilmelidir.
  4. başarılı olursa belirteç istemleri ayıklanır. Nonce denetimi başarılı olursa, sonuçlar örneği olan içine yerleştirilir ve oturuma kaydedilir. Uygulama daha sonra, aşağıdaki kodda gösterildiği gibi, buna erişmesi gerektiğinde oturumdan örneği aracılığıyla örneğini oluşturabilir:

    // parse IdToken claims from the IAuthenticationResult:
    // (the next step - validateNonce - requires parsed claims)
    context.setIdTokenClaims(result.idToken());
    
    // if nonce is invalid, stop immediately! this could be a token replay!
    // if validation fails, throws exception and cancels auth:
    validateNonce(context);
    
    // set user to authenticated:
    context.setAuthResult(result, client.tokenCache().serialize());
    
    // handle groups overage if it has occurred.
    handleGroupsOverage(contextAdapter);
    
  5. Önceki adımdan sonra, örneğini kullanarak çağrısıyla grup üyeliklerini alabilirsiniz.

  6. Kullanıcı çok fazla sayıda grubun üyesiyse (200'den fazla), çağrısı olmasaydı çağrısı boş olabilirdi. Bu arada, değerini döndürür; bu da bir aşım meydana geldiğini ve grupların tam listesini almak için Microsoft Graph'a bir çağrı yapılması gerektiğini gösterir. Aşım durumu olduğunda bu uygulamanın öğesini nasıl kullandığını görmek için AuthHelper.java içindeki yöntemine bakın.

Yolları koruma

Örnek uygulamanın yollara erişimi nasıl filtrelediğini görmek için bkz . AuthenticationFilter.java . authentication.properties dosyasında, özelliği, aşağıdaki örnekte gösterildiği gibi yalnızca kimliği doğrulanmış kullanıcıların erişebileceği virgülle ayrılmış yolları içerir:

# for example, /token_details requires any user to be signed in and does not require special groups claim
app.protect.authenticated=/token_details

altındaki virgülle ayrılmış kural kümelerinde listelenen rotalardan herhangi biri de, aşağıdaki örnekte gösterildiği gibi, kimliği doğrulanmamış kullanıcılar için erişime kapalıdır. Ancak, bu yollar grup üyeliklerinin boşlukla ayrılmış bir listesini de içerir. Kimlik doğrulamasından sonra yalnızca ilgili gruplardan en az birine ait kullanıcılar bu yollara erişebilir.

# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}

# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/admin_only admin, /regular_user admin user

Kapsamlar

Kapsamlar, Microsoft Entra ID'ye uygulamanın talep ettiği erişim düzeyini gösterir.

İstenen kapsamlara bağlı olarak Microsoft Entra Id, oturum açma sırasında kullanıcıya bir onay iletişim kutusu sunar. Kullanıcı bir veya daha fazla kapsamı onaylarsa ve bir belirteç alırsa, onay verilen kapsamlar ortaya çıkan içine kodlanır.

Uygulama tarafından istenen kapsamlar için bkz . authentication.properties. Varsayılan olarak, uygulama scopes değerini olarak ayarlar. Kullanıcının grup üyeliklerini almak için uygulamanın Graph'ı çağırması gerektiğinde bu microsoft graph API kapsamı gereklidir.

Daha Fazla Bilgi

  • Java için Microsoft Kimlik Doğrulama Kitaplığı (MSAL)
  • Microsoft kimlik platformu (geliştiriciler için Microsoft Entra ID)
  • Hızlı başlangıç: Microsoft kimlik platformuna bir uygulamayı kaydetme
  • Microsoft Entra ID uygulama onayı deneyimlerini anlama
  • Kullanıcı ve yönetici onayını anlama
  • MSAL kod örnekleri