Share via


Microsoft Entra Id kullanarak Java WebLogic uygulamaları için oturum açmayı etkinleştirme

Bu makalede, Java için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) kullanarak Microsoft Entra ID kiracınızda kullanıcılara oturum açan bir Java WebLogic uygulaması gösterilmektedir.

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

Uygulamanın topolojisini gösteren diyagram.

İstemci uygulaması, kullanıcıları kendi Microsoft Entra ID kiracılarında oturum açmak ve Microsoft Entra Id'den bir kimlik 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ğrulama durumuna göre yollarını korur.

Ö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ını alma.
  • Yalnızca kuruluş dizininizdeki hesaplarla çalışmak istiyorsanız kendi Microsoft Entra Id kiracınızdaki bir kullanıcı hesabı , yani tek kiracılı mod. Microsoft Entra Id kiracınızda bir kullanıcı hesabı oluşturmadıysanız devam etmeden önce bunu yapmanız gerekir. Daha fazla bilgi için bkz . Kullanıcıları oluşturma, davet etme ve silme.
  • Herhangi bir kuruluş dizinindeki (yani çok kiracılı moddaki) hesaplarla çalışmak istiyorsanız, herhangi bir kuruluşun Microsoft Entra ID kiracısında bir kullanıcı hesabı. Bu örneği kişisel bir Microsoft hesabıyla çalışacak şekilde değiştirmeniz gerekir. Microsoft Entra Id kiracınızda henüz bir kullanıcı hesabı oluşturmadıysanız, devam etmeden önce bunu yapmalısınız. Daha fazla bilgi için bkz . Kullanıcıları oluşturma, davet etme ve silme.
  • Kişisel Microsoft hesaplarıyla çalışmak istiyorsanız kişisel bir Microsoft hesabı (örneğin, Xbox, Hotmail, Live vb.).

Öneriler

Örneği ayarlama

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-java-servlet-webapp-authentication.git
cd 1-Authentication/sign-in

Alternatif olarak, ms-identity-java-servlet-webapp-authentication 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 kaydetme

Bu örnekte bir proje var. Uygulamayı Azure portalına kaydetmek için el ile yapılandırma adımlarını izleyebilir veya bir PowerShell betiği kullanabilirsiniz. Betik aşağıdaki görevleri yapar:

  • Microsoft Entra ID uygulamalarını ve parolalar, izinler ve bağımlılıklar gibi ilgili nesneleri oluşturur.
  • Proje yapılandırma dosyalarını değiştirir.
  • Varsayılan olarak, yalnızca kuruluş dizininizdeki hesaplarla çalışan bir uygulama ayarlar.

PowerShell betiğini çalıştırmak için aşağıdaki adımları kullanın:

  1. Windows'da PowerShell'i açın ve kopyalanan dizinin köküne gidin.

  2. PowerShell için yürütme ilkesini ayarlamak için aşağıdaki komutu kullanın:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    
  3. Yapılandırma betiğini çalıştırmak için aşağıdaki komutları kullanın:

    cd .\AppCreationScripts\
    .\Configure.ps1
    

    Not

    Betikleri çalıştırmanın diğer yolları Uygulama Oluşturma Betikleri bölümünde açıklanmıştır. Betikler ayrıca, CI/CD senaryolarınızda yardımcı olabilecek otomatik uygulama kaydı, yapılandırma ve kaldırma için bir kılavuz sağlar.

Uygulamayı 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 ClientIDAppIdile Application ID aynıdır.

  1. Projeyi IDE'nizde açın.

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

  3. dizesini {enter-your-tenant-id-here}bulun. Mevcut değeri aşağıdaki değerlerden biriyle değiştirin:

    • Uygulamanızı yalnızca bu kuruluş dizinindeki Hesaplar seçeneğiyle kaydettiyseniz Microsoft Entra Id kiracı kimliğiniz.
    • Uygulamanızı herhangi bir kuruluş dizinindeki Hesaplar seçeneğiyle kaydettiyseniz sözcüğüorganizations.
    • Uygulamanızı herhangi bir kuruluş dizinindeki Hesaplar ve kişisel Microsoft hesapları seçeneğiyle kaydettiyseniz sözcüğücommon.
    • Uygulamanızı Kişisel Microsoft hesapları seçeneğiyle kaydettiyseniz sözcüğüconsumers.
  4. Dizeyi {enter-your-client-id-here} bulun ve mevcut değeri Azure portalından kopyalanan uygulama kimliğiyle veya java-servlet-webapp-authenticationclientId uygulamanın kimliğiyle değiştirin.

  5. Dizeyi {enter-your-client-secret-here} bulun ve mevcut değeri Azure portalında uygulamanın oluşturulması java-servlet-webapp-authentication sırasında kaydettiğiniz değerle değiştirin.

Örneği oluşturma

Maven kullanarak örneği oluşturmak için, örneğin pom.xml dosyasını içeren dizine gidin ve 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 dağıtma

Bu yönergelerde, WebLogic'i yüklediğiniz ve bazı sunucu etki alanı ayarladığınız varsayılır.

WebLogic'e dağıtmadan önce, örneğin kendisinde bazı yapılandırma değişiklikleri yapmak ve ardından paketi derlemek veya yeniden derlemek için aşağıdaki adımları kullanın:

  1. Örnekte, istemci kimliğini, kiracıyı , yeniden yönlendirme URL'sini vb. yapılandırdığınız application.properties veya authentication.properties dosyasını bulun.

  2. Bu dosyada, WebLogic'in üzerinde çalıştığı URL ve bağlantı noktasına veya başvurularını localhost:8080localhost:8443 değiştirin. Bu, varsayılan olarak olmalıdır localhost:7001.

  3. Ayrıca Azure uygulama kaydında da aynı değişikliği yapmanız gerekir; burada Bunu Azure portalında Kimlik Doğrulaması sekmesindeki Yeniden Yönlendirme URI değeriyle ayarlayabilirsiniz.

Örneği web konsolu aracılığıyla WebLogic'e dağıtmak için aşağıdaki adımları kullanın:

  1. WebLogic sunucusunu DOMAIN_NAME\bin\startWebLogic.cmd ile başlatın.

  2. tarayıcınızda WebLogic web konsoluna gidin http://localhost:7001/console.

  3. Etki Alanı Yapısı>Dağıtımları'na gidin, Yükle'yi seçin, Dosyalarınızı karşıya yükleyin'i seçin ve ardından Maven kullanarak oluşturduğunuz .war dosyasını bulun.

  4. Bu dağıtımı uygulama olarak yükle'yi seçin, İleri'yi, Son'u ve ardından Kaydet'i seçin.

  5. Varsayılan ayarların çoğu iyi olmalıdır, ancak uygulamayı örnek yapılandırmada veya Azure uygulama kaydında ayarladığınız yeniden yönlendirme URI'sine uyacak şekilde adlandırmanız gerekir. Yani, yeniden yönlendirme URI'si ise http://localhost:7001/msal4j-servlet-auth, uygulamaya msal4j-servlet-authadını vermelisiniz.

  6. Etki Alanı Yapısı>Dağıtımları'na geri dönün ve uygulamanızı başlatın.

  7. Uygulama başlatıldıktan sonra adresine gidin http://localhost:7001/<application-name>/ve uygulamaya erişebilmelisiniz.

Örneği keşfetme

Ö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üğme, uygulamayı ilk kez çalıştırdığınızda Oturum Aç'ı okur.
  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 ifadesinin yer aldığından ve kullanıcı adınızı görüntülediğine dikkat edin.
  6. Kimlik belirtecinin çözülen taleplerinden bazılarını görmek için Kimlik Belirteci Ayrıntıları'nı seçin.
  7. Oturumu kapatmak için köşedeki düğmeyi kullanın.
  8. Oturumu kapattığınızda, kullanıcının yetkisi olmadığında uygulamanın kimlik belirteci talepleri yerine bir 401: unauthorized hata görüntülediğini gözlemlemek için Kimlik Belirteci Ayrıntıları'nı seçin.

Kod hakkında

Bu örnek, Kullanıcıları Microsoft Entra ID kiracınızda oturum açmak için Java için MSAL'nin (MSAL4J) nasıl kullanılacağını gösterir. MSAL4J'yi kendi uygulamalarınızda kullanmak istiyorsanız Maven kullanarak projelerinize eklemeniz gerekir.

Bu örneğin davranışını çoğaltmak istiyorsanız, src/main/java/com/microsoft/azuresamples/msal4j klasöründeki pom.xml dosyasını ve yardımcı ve 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
AppCreationScripts/ Microsoft Entra Id uygulama kayıtlarını otomatik olarak yapılandırmak için betikler.
src/main/java/com/microsoft/azuresamples/msal4j/authwebapp/ 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 ____Servlet.java ile 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 Kimliği 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 Örneğin lisansı.

ConfidentialClientApplication

ConfidentialClientApplication Aşağıdaki örnekte gösterildiği gibi AuthHelper.java dosyasında bir örnek oluşturulur. Bu nesne, Microsoft Entra Id yetkilendirme URL'sini oluşturmaya ve ayrıca bir erişim belirteci için kimlik doğrulama belirtecinin değişimine 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 bir gereksinim olan gizli dizi.
  • Microsoft Entra Id kiracı kimliğinizi içeren Microsoft Entra Id Authority.

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ız için uç noktaya istek /authorize göndermektir. MSAL4J ConfidentialClientApplication örneği, 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:

    • AuthorizationRequestUrlParameters: AuthorizationRequestUrl oluşturmak için ayarlanması gereken parametreler.

    • REDIRECT_URI: Burada Microsoft Entra Id, kullanıcı kimlik bilgilerini topladıktan sonra tarayıcıyı kimlik doğrulama koduyla birlikte yeniden yönlendirir. Azure portalındaki Microsoft Entra ID uygulama kaydındaki yeniden yönlendirme URI'si ile eşleşmelidir.

    • SCOPES: Kapsamlar , uygulama tarafından istenen izinlerdir. Normalde, üç kapsam openid profile offline_access kimlik belirteci yanıtı almak için yeterlidir.

      Uygulama tarafından istenen kapsamların tam listesini authentication.properties dosyasında bulabilirsiniz. gibi User.Readdaha 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 yönelik geçerli bir istek bir yetkilendirme kodu içerir.

  3. Örnek ConfidentialClientApplication daha sonra bu yetkilendirme kodunu bir kimlik belirteci ve Microsoft Entra Id'den erişim belirteci ile değiştirir.

    // 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:

    • AuthorizationCodeParameters: Kimlik ve/veya erişim belirteci için Yetkilendirme Kodunu değiştirmek için ayarlanması gereken parametreler.
    • authCode: Yeniden yönlendirme uç noktasında alınan yetkilendirme kodu.
    • REDIRECT_URI: Önceki adımda kullanılan yeniden yönlendirme URI'sinin yeniden geçirilmesi gerekir.
    • SCOPES: Önceki adımda kullanılan kapsamlar yeniden geçirilmelidir.
  4. acquireToken Başarılı olursa belirteç talepleri ayıklanır. Nonce denetimi geçerse, sonuçlar bir örneğine contextIdentityContextData yerleştirilir ve oturuma kaydedilir. Uygulama daha sonra aşağıdaki kodda gösterildiği gibi oturumdan erişime ihtiyaç duyduğu her zaman örneğini kullanarak öğesinin örneğini IdentityContextDataIdentityContextAdapterServlet 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());
    

Yolları koruma

Örnek uygulamanın yollara erişimi nasıl filtrelediğini öğrenmek için bkz . AuthenticationFilter.java. authentication.properties dosyasında, app.protect.authenticated ö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 roles claim(s)
app.protect.authenticated=/token_details

Kapsamlar

Kapsamlar , Microsoft Entra Id'ye uygulamanın istediği erişim düzeyini bildirir.

İ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 kapsama onay verirse ve bir belirteç alırsa, scopes-consented-to sonucuna access_tokenkodlanır.

Uygulama tarafından istenen kapsamlar için bkz . authentication.properties. Bu üç kapsam MSAL tarafından istenir ve varsayılan olarak Microsoft Entra Id tarafından verilir.

Daha Fazla Bilgi

Sonraki adım

Azure Sanal Makineler'de WebLogic'e Java WebLogic uygulamaları dağıtma