Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Microsoft Entra ID için Spring Boot Starter ile Spring Initializr kullanarak oturum açma özelliğine sahip bir Java uygulamasının nasıl oluşturulacağı gösterilmektedir.
Bu öğreticide şunların nasıl yapılacağını öğreneceksiniz:
- Spring Initializr kullanarak Java uygulaması oluşturma
- Azure Active Directory B2C'yi yapılandırma
- Spring Boot sınıfları ve ek açıklamaları ile uygulamanın güvenliğini sağlama
- Java uygulamanızı derleme ve test etme
Microsoft Entra ID, Microsoft'un bulut ölçekli kurumsal kimlik çözümüdür. Azure Active Directory B2C Microsoft Entra Id özellik kümesini tamamlayarak işletmeden müşteriye (B2C) uygulamalarınıza müşteri, tüketici ve vatandaş erişimini yönetmenize olanak tanır.
Önkoşullar
- Bir Azure aboneliği. Henüz hesabınız yoksa başlamadan önce ücretsiz hesap oluşturun.
- Desteklenen bir Java Geliştirme Seti (JDK). Azure'da geliştirme yaparken kullanılabilecek JDK'ler hakkında daha fazla bilgi için bkz. Azure'da Java desteği ve Azure Stack.
- Apache Maven, sürüm 3.0 veya üstü.
Önemli
Bu makaledeki adımları tamamlamak için Spring Boot sürüm 2.5 veya üzeri gereklidir.
Spring Initializr kullanarak uygulama oluşturma
https://start.spring.io/adresine gidin.
Değerleri bu kılavuza göre doldurun. Etiketler ve düzen burada gösterilen görüntüden farklı olabilir.
- Projesialtında, Maven Projesiseçeneğini seçin.
- Dilolarak Javaseçin.
- Spring Boot
altında, 2.7.11 öğesini seçin. - Grupaltında, Artefakt ve Adı için kısa bir açıklayıcı dize kullanarak aynı değeri girin. Siz yazarken kullanıcı arabirimi bu alanlardan bazılarını otomatik olarak doldurabilir.
- Bağımlılıklar bölmesinde Bağımlılık Ekle'yi seçin. Spring Web ve Spring Securitybağımlılıkları eklemek için kullanıcı arabirimini kullanın.
Not
Spring Security 5.5.1, 5.4.7, 5.3.10 ve 5.2.11, CVE-2021-22119 cve-2021-22119 cve-security-oauth2-clientile Hizmet Reddi saldırısı. Eski sürümü kullanıyorsanız lütfen yükseltin.
Proje Oluşturöğesini seçin ve ardından projeyi yerel bilgisayarınızdaki bir konuma indirin. İndirilen dosyayı projenizin adını taşıyan bir dizine taşıyın ve dosyanın sıkıştırmasını açın. Dosya düzeni, yerine
yourProjectiçin girdiğiniz değerle aşağıdakine benzer olmalıdır.. ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main │ ├── java │ │ └── yourProject │ │ └── yourProject │ │ └── YourProjectApplication.java │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── java └── yourProject └── yourProject └── YourProjectApplicationTests.java
Microsoft Entra örneği oluşturma ve başlatma
Active Directory örneğini oluşturma
https://portal.azure.comoturum açın.
Kaynakoluştur'u seçin. Azure Active Directory B2Ciçin arama yapın.
oluştur'useçin.
Azure Active Directory B2C için Azure Marketplace girdisi
'ı seçin Yeni Azure AD B2C Kiracısı oluştur.
Yeni bir Azure AD B2C Kiracısı oluşturmak için Azure portalı seçeneği.
Kuruluş adı ve Başlangıç etki alanı adıiçin uygun değerleri girin, ardından Oluşturöğesini seçin.
Azure AD B2C Kiracı Oluştur ekranını
Active Directory oluşturma işlemi tamamlandığında sağ üst köşedeki hesabınızı seçin, Dizindeğiştir'i ve ardından oluşturulan dizini seçin. Yeni kiracı giriş sayfasına yönlendirilirsiniz. Ardından
b2carayın ve Azure AD B2Cseçin.
Spring Boot uygulamanız için uygulama kaydı ekleme
Yönet bölmesinde, Uygulama kayıtları'nı ve ardından Yeni kayıt'ı seçin.
Ad alanına uygulamanızın adını girin, ardından Kaydetseçeneğini seçin.
Azure AD B2C'yi
Yönet bölmesine dönüpUygulama kayıtları'nı ve ardından oluşturduğunuz uygulama adını seçin. Uygulama kayıtları ekranında görünen ad seçili durumda.
Kimlik Doğrulaması
seçin, ardından Platform ekle , sonra Web . Yeniden Yönlendirme URI'lerini http://localhost:8080/login/oauth2/code/olarak ayarlayın ve Yapılandır'ı seçin.
Uygulamanız için uygulama sırlarını ekleyin
Sertifikalar ve gizli bilgiler ekranı, kopyala düğmesinin seçili olduğu.
Not
Sertifikaları & gizli bilgiler bölümünden ayrılır ve geri dönerseniz, gizli bilgi değerini göremezsiniz. Bu durumda, başka bir gizli oluşturmanız ve gelecekte kullanmak üzere kopyalamanız gerekir.
Bazen, oluşturulan gizli dizi değeri ters eğik çizgi veya ters tırnak işareti gibi application.yml dosyasına eklenmesiyle ilgili sorunlu karakterler içerebilir. Bu durumda, o sırrı atıp başka bir sır oluşturun.
Kullanıcı akışı ekleme
Kiracı ana sayfanıza gidin. Sol bölmenin İlkeler bölümünde, Kullanıcı akışlarıseçeneğini ve ardından Yeni kullanıcı akışıseçeneğini seçin.
Şimdi bu eğitimden ayrılacak, başka bir eğitimi uygulayacaksınız ve işiniz bittiğinde bu eğitime geri döneceksiniz. Diğer öğreticiye gittiğinizde aklınızda bulundurmanız gereken bazı şeyler şunlardır.
- Yeni Kullanıcı Akışıseçmenizi isteyen adımla başlayın.
- Bu öğretici
webapp1'a atıfta bulunuyorsa, bunun yerine Grup için girdiğiniz değeri kullanın. - Akışlardan döndürülecek talepleri seçerken Görünen Ad seçildiğinden emin olun. Bu iddia olmadan, bu öğreticide oluşturulan uygulama çalışmayacak.
- Kullanıcı akışlarını çalıştırmanız istendiğinde, daha önce belirttiğiniz yeniden yönlendirme URL'si henüz etkin değildir. Yine de akışları çalıştırabilirsiniz, ancak yeniden yönlendirme başarıyla tamamlanmaz. Bu beklenen bir durumdur.
- "Sonraki adımlar"a ulaştığınızda bu öğreticiye geri dönün.
Öğreticisi: "Kaydolma ve oturum açma", "profil düzenleme" ve "parola sıfırlama" için kullanıcı akışları oluşturmak üzere Azure Active Directory B2C kullanıcı akışları oluşturma başlığı altındaki tüm adımları izleyin.
Azure AD B2C hem yerel hesapları hem de sosyal kimlik sağlayıcılarını destekler. GitHub kimlik sağlayıcısı oluşturma örneği için bkz. Azure Active Directory B2Ckullanarak GitHub hesabıyla kaydolma ve oturum açma ayarlama
.
Uygulamanızı yapılandırma ve derleme
Azure AD B2C örneğini ve bazı kullanıcı akışlarını oluşturduğunuza göre Spring uygulamanızı Azure AD B2C örneğine bağlayacaksınız.
Komut satırında, Spring Initializr'dan indirdiğiniz .zip dosyasının sıkıştırmasını açtığınız dizine cd komutunu kullanarak geçin.
Projenizin üst klasörüne gidin ve pom.xml Maven proje dosyasını bir metin düzenleyicisinde açın.
Spring OAuth2 güvenliği için gerekli bağımlılıkları pom.xml'ye ekleyin.
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory-b2c</artifactId> <version>See Below</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>See Below</version> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> <version>See Below</version> </dependency>spring-cloud-azure-starter-active-directory-b2ciçin, kullanılabilir en son sürümü kullanın. Bunu aramak için mvnrepository.com kullanabilirsiniz.spring-boot-starter-thymeleafiçin, yukarıda seçtiğiniz Spring Boot sürümüne karşılık gelen sürümü kullanın, örneğin2.3.4.RELEASE.thymeleaf-extras-springsecurity5için, kullanılabilir en son sürümü kullanın. Bunu aramak için mvnrepository.com kullanabilirsiniz. Bu yazının yazıldığı tarihte, en son sürüm3.0.4.RELEASE.pom.xml dosyasını kaydedin ve kapatın.
-
mvn -DskipTests clean installkomutunu çalıştırarak bağımlılıklarınızın doğru olduğunu doğrulayın.BUILD SUCCESSgörmüyorsanız devam etmeden önce sorunu giderin ve çözün.
-
Projenizdeki src/main/resources klasörüne gidin ve bir metin düzenleyicisinde application.yml dosyası oluşturun.
Daha önce oluşturduğunuz değerleri kullanarak uygulama kaydınızın ayarlarını belirtin; mesela:
spring: cloud: azure: active-directory: b2c: enabled: true base-uri: https://<your-tenant-initial-domain-name>.b2clogin.com/<your-tenant-initial-domain-name>.onmicrosoft.com/ credential: client-id: <your-application-ID> client-secret: '<secret-value>' login-flow: sign-up-or-sign-in logout-success-url: <your-logout-success-URL> user-flows: sign-up-or-sign-in: <your-sign-up-or-sign-in-user-flow-name> profile-edit: <your-profile-edit-user-flow-name> password-reset: <your-password-reset-user-flow-name> user-name-attribute-name: <your-user-name-attribute-name>client-secretdeğerinin tek tırnak içine alındığına dikkat edin.<secret-value>değeri YAML'de mevcut olduğunda tek tırnak içinde olmasını gerektiren bazı karakterler içermesi nedeniyle bu gereklidir.Not
Bu yazıdan itibaren, application.yml'da kullanılabilen Active Directory B2C Spring Tümleştirme değerlerinin tam listesi aşağıdaki gibidir:
spring: cloud: azure: active-directory: b2c: enabled: true base-uri: credential: client-id: client-secret: login-flow: logout-success-url: user-flows: sign-up-or-sign-in: profile-edit: # optional password-reset: # optional user-name-attribute-name:application.yml dosyası spring-cloud-azure-starter-active-directory-b2c örneğinde kullanılabilir: GitHub'da aad-b2c-web-application.
application.yml dosyasını kaydedin ve kapatın.
src/main/java/ içinde denetleyici adlı bir klasör oluşturun<GroupId>/<GroupId>
<yourGroupId>yerine Groupiçin girdiğiniz değeri yazın.denetleyicisi klasöründe WebController.java adlı yeni bir Java dosyası oluşturun ve dosyayı bir metin düzenleyicisinde açın.
Aşağıdaki kodu girin,
yourGroupIduygun şekilde değiştirin ve dosyayı kaydedip kapatın:package yourGroupId.yourGroupId.controller; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class WebController { private void initializeModel(Model model, OAuth2AuthenticationToken token) { if (token != null) { final OAuth2User user = token.getPrincipal(); model.addAttribute("grant_type", user.getAuthorities()); model.addAllAttributes(user.getAttributes()); } } @GetMapping(value = "/") public String index(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "home"; } @GetMapping(value = "/greeting") public String greeting(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "greeting"; } @GetMapping(value = "/home") public String home(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "home"; } }Denetleyicideki her yöntem
çağırdığından ve bu yöntem çağırdığından, src/main/resources/templates içindeki tüm HTML sayfaları , veya gibi bu özniteliklerden herhangi birine erişebilir. user.getAttributes()'dan dönen değerler aslında kimlik doğrulaması içinid_token'in talepleridir. Kullanılabilir taleplerin tam listesi,Microsoft kimlik platformu kimlik belirteçlerinde listelenir. src/main/java/ içinde güvenlik adlı bir klasör oluşturun<GroupId>/<GroupId>
yourGroupIdyerine Groupiçin girdiğiniz değeri yazın.güvenlik klasöründe WebSecurityConfiguration.java adlı yeni bir Java dosyası oluşturun ve dosyayı bir metin düzenleyicisinde açın.
Aşağıdaki kodu girin,
yourGroupIduygun şekilde değiştirin ve dosyayı kaydedip kapatın:package yourGroupId.yourGroupId.security; import com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cOidcLoginConfigurer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { private final AadB2cOidcLoginConfigurer configurer; public WebSecurityConfiguration(AadB2cOidcLoginConfigurer configurer) { this.configurer = configurer; } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest() .authenticated() .and() .apply(configurer) ; } }home.html dosyasını spring-cloud-azure-starter-active-directory-b2c örneğinden kopyalayın: aad-b2c-web-applicationsrc/main/resources/templatesve
${your-profile-edit-user-flow}ve${your-password-reset-user-flow}daha önce oluşturduğunuz kullanıcı akışlarının adlarıyla değiştirin.
Uygulamanızı derleme ve test etme
Bir komut istemi açın ve dizini uygulamanızın pom.xml dosyasının bulunduğu klasörle değiştirin.
Spring Boot uygulamanızı Maven ile derleyin ve çalıştırın; mesela:
Not
Yerel spring boot uygulamasının çalıştığı sistem saatine göre saatin doğru olması son derece önemlidir. OAuth 2.0 kullanılırken saat kaymasına çok az tolerans vardır. Üç dakikalık yanlışlık bile oturum açma işleminin
[invalid_id_token] An error occurred while attempting to decode the Jwt: Jwt used before 2020-05-19T18:52:10Zbenzer bir hatayla başarısız olmasına neden olabilir. Bu yazıdan itibaren, time.gov saatinizin gerçek saatten ne kadar uzak olduğunu gösteren bir göstergeye sahiptir. Uygulama +0,019 saniyelik bir dengesizlikle başarıyla çalıştırıldı.mvn -DskipTests clean package mvn -DskipTests spring-boot:runUygulamanız Maven tarafından derlenip başlatıldıktan sonra
http://localhost:8080/bir web tarayıcısında açın; oturum açma sayfasına yönlendirilmelidir.Web uygulaması oturum açma sayfasını
Oturum açmayla ilgili metin içeren bağlantıyı seçin. Kimlik doğrulama işlemini başlatmak için Azure AD B2C'ye yönlendirilmelisiniz.
Başarıyla oturum açtıktan sonra tarayıcıdan örnek
home pagegörmeniz gerekir.Web uygulamasının başarılı oturum açma
Sorun giderme
Aşağıdaki bölümlerde karşılaşabileceğiniz bazı sorunların nasıl çözülebileceği açıklanmaktadır.
Özniteliklerde öznitelik adı eksik
Örneği çalıştırırken Missing attribute 'name' in attributesmesajıyla bir özel durum alabilirsiniz. Bu istisnanın kaydı aşağıdaki çıkışa benzer olacaktır:
java.lang.IllegalArgumentException: Missing attribute 'name' in attributes
at org.springframework.security.oauth2.core.user.DefaultOAuth2User.<init>(DefaultOAuth2User.java:67) ~[spring-security-oauth2-core-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser.<init>(DefaultOidcUser.java:89) ~[spring-security-oauth2-core-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService.loadUser(OidcUserService.java:144) ~[spring-security-oauth2-client-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService.loadUser(OidcUserService.java:63) ~[spring-security-oauth2-client-5.3.6.RELEASE.jar:5.3.6.RELEASE]
Bu hatayı alırsanız, Öğreticisi: Azure Active Directory B2C'de kullanıcı akışları oluşturmaiçinde oluşturduğunuz kullanıcı iş akışını bir kez daha denetleyin. Kullanıcı iş akışını oluştururken, Kullanıcı öznitelikleri ve iddialarıiçin ve Görünen Adiçin öznitelikleri seçtiğinizden emin olun. Ayrıca, user-name-attribute-name dosyasındaki düzgün yapılandırıldığından emin olun.
B2C uç noktasına döngü kullanarak oturum açma
Bu sorun büyük olasılıkla localhostiçin kirli çerezlerden kaynaklanır.
localhost için tanımlama bilgilerini temizleyin ve yeniden deneyin.
Özet
Bu öğreticide, Azure Active Directory B2C başlatıcısını kullanarak yeni bir Java web uygulaması oluşturdunuz, yeni bir Azure AD B2C kiracısı yapılandırıp yeni bir uygulama kaydettiniz ve ardından uygulamanızı Web uygulamasını korumak için Spring ek açıklamalarını ve sınıflarını kullanacak şekilde yapılandırdık.
Kaynakları temizleme
Artık gerekmediğinde, beklenmeyen ücretlerden kaçınmak için bu makalede oluşturulan kaynakları silmek için Azure portalı kullanın.
Sonraki adımlar
Spring ve Azure hakkında daha fazla bilgi edinmek için Azure'da Spring belge merkezine geçin.