Události
Vytváření inteligentních aplikací
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatTento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
V tomto článku se dozvíte, jak vytvořit aplikaci v Javě s funkcí přihlašování pomocí Spring Initializr pomocí úvodní sady Spring Boot pro ID Microsoft Entra.
V tomto kurzu se naučíte:
Microsoft Entra ID je cloudové řešení podnikové identity od Microsoftu. Azure Active Directory B2C pochválí sadu funkcí Microsoft Entra ID, která umožňuje spravovat přístup zákazníků, spotřebitelů a občanů k vašim aplikacím typu business-to-consumer (B2C).
Důležité
K dokončení kroků v tomto článku se vyžaduje Spring Boot verze 2.5 nebo vyšší.
Přejděte na https://start.spring.io/.
Vyplňte hodnoty podle těchto pokynů. Popisky a rozložení se můžou lišit od obrázku zobrazeného tady.
Poznámka
Spring Security 5.5.1, 5.4.7, 5.3.10 a 5.2.11 byly vydány, aby řešily následující zprávu CVE CVE-2021-22119: útok odmítnutí služby s komponentou spring-security-oauth2-client. Pokud používáte starší verzi, upgradujte ji.
Vyberte Vygenerovat projekta poté stáhněte projekt do zadané složky na místním počítači. Přesuňte stažený soubor do adresáře pojmenovaného po projektu a rozbalte ho. Rozložení souboru by mělo vypadat přibližně takto, s hodnotou, kterou jste zadali pro Group místo yourProject
.
.
├── 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
Přihlaste se k https://portal.azure.com.
Vyberte Vytvořit prostředek. Vyhledejte Azure Active Directory B2C.
Vyberte Vytvořit.
Vyberte Vytvořit nové předplatné Azure AD B2C.
V název organizace a počáteční název doményzadejte příslušné hodnoty a pak vyberte Vytvořit.
Po dokončení vytváření služby Active Directory vyberte svůj účet v pravém horním rohu, vyberte možnost Přepnout adresářa poté zvolte vytvořený adresář. Budete přesměrováni na novou domovskou stránku tenanta. Pak vyhledejte b2c
a vyberte Azure AD B2C.
V podokně Spravovat vyberte Registrace aplikacía poté vyberte Nová registrace.
Do pole Název zadejte název své aplikace a poté vyberte Zaregistrovat.
Zpět v podokně Spravovat vyberte Registrace aplikacía pak vyberte název vámi vytvořené aplikace.
Vyberte ověřování, pak přidejte platformu a poté web. Nastavte URI přesměrování na http://localhost:8080/login/oauth2/code/
, poté vyberte Konfigurovat.
Vyberte Certifikáty & tajemství, pak Nové klientské tajemství. Zadejte popis tajného kódu a vyberte Přidat. Po vytvoření tajného kódu vyberte ikonu kopírování vedle hodnoty tajného kódu a zkopírujte hodnotu pro pozdější použití v tomto článku.
obrazovka
Poznámka
Pokud opustíte oddíl Certifikáty & tajných kódů a vrátíte se, nebudete moct zobrazit hodnotu tajného kódu. V takovém případě musíte vytvořit další tajný klíč a zkopírovat ho pro budoucí použití. Vygenerovaná hodnota tajného kódu může někdy obsahovat znaky, které jsou problematické pro zahrnutí do souboru application.yml, například zpětné lomítko nebo zpětný apostrof. V takovém případě tento tajný klíč zahoďte a vygenerujte jiný.
Přejděte na hlavní stránku tenanta. V části „Zásady“ v levém podokně vyberte „Toky uživatelů“ a poté vyberte „Nový tok uživatele“ .
Teď tento kurz opustíte, spustíte další kurz a až budete hotovi, vraťte se k tomuto kurzu. Tady je několik věcí, které byste měli mít na paměti, když přejdete do jiného kurzu.
webapp1
, použijte místo toho hodnotu, kterou jste zadali pro Group.Postupujte podle všech kroků v kurzu : Vytváření toků uživatelů v Azure Active Directory B2C vytváření toků uživatelů pro registraci a přihlášení, úpravy profilu a resetování hesla.
Azure AD B2C podporuje místní účty i zprostředkovatele sociálních identit. Příklad vytvoření zprostředkovatele identity GitHub najdete viz Nastavení registrace a přihlášení pomocí účtu GitHub pomocí Azure Active Directory B2C.
Teď, když jste vytvořili instanci Azure AD B2C a některé toky uživatelů, připojíte aplikaci Spring k instanci Azure AD B2C.
Z příkazového řádku přejděte do adresáře pomocí příkazu `cd`, do kterého jste rozbalili soubor .zip, který jste stáhli ze Spring Initializr.
Přejděte do nadřazené složky projektu a otevřete soubor projektu pom.xml Maven v textovém editoru.
Přidejte do pom.xmlzávislosti zabezpečení Spring OAuth2:
<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>
Pro spring-cloud-azure-starter-active-directory-b2c
použijte nejnovější dostupnou verzi. Možná budete moct toto vyhledat pomocí mvnrepository.com.
Pro spring-boot-starter-thymeleaf
použijte verzi odpovídající verzi Spring Bootu, kterou jste vybrali výše, například 2.3.4.RELEASE
.
Pro thymeleaf-extras-springsecurity5
použijte nejnovější dostupnou verzi. Možná budete moct použít mvnrepository.com k ověření tohoto. K dnešnímu dni je nejnovější verze 3.0.4.RELEASE
.
Uložte a zavřete soubor pom.xml.
mvn -DskipTests clean install
ověřte správnost závislostí. Pokud nevidíte BUILD SUCCESS
, odstraňte problém předtím, než budete pokračovat.Přejděte do složky src/main/resources v projektu a vytvořte soubor application.yml v textovém editoru.
Zadejte nastavení registrace aplikace pomocí hodnot, které jste vytvořili dříve; například:
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>
Všimněte si, že hodnota client-secret
je uzavřena v jednoduchých uvozovkách. To je nezbytné, protože hodnota <secret-value>
bude téměř jistě obsahovat některé znaky, které vyžadují, aby byly v jednoduchých uvozovkách, pokud jsou přítomné v YAML.
Poznámka
K datu tohoto zápisu je úplný seznam hodnot Spring Integrace služby Active Directory B2C, které jsou k dispozici pro použití v application.yml, následující:
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:
Soubor application.yml je k dispozici v ukázce spring-cloud-azure-starter-active-directory-b2c: aad-b2c-web-application na GitHubu.
Uložte a zavřete soubor application.yml.
Ve src/main/java/<yourGroupId>/<yourGroupId>vytvořte složku s názvem controller , přičemž <yourGroupId>
nahraďte hodnotou, kterou jste zadali pro Group.
Ve složce kontroleru
Zadejte následující kód, odpovídajícím způsobem změňte yourGroupId
a pak soubor uložte a zavřete:
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";
}
}
Vzhledem k tomu, že každá metoda v kontroleru volá initializeModel()
a tato metoda volá model.addAllAttributes(user.getAttributes());
, všechny stránky HTML v src/main/resources/templates mají přístup k některým z těchto atributů, jako jsou ${name}
, ${grant_type}
nebo ${auth_time}
. Hodnoty vrácené z user.getAttributes()
jsou ve skutečnosti nároky id_token
pro účely ověřování. Úplný seznam dostupných nároků je uvedený v ID tokenech platformy Microsoft.
Vytvořte složku s názvem security v src/main/java/<yourGroupId>/<yourGroupId>a nahraďte yourGroupId
hodnotou, kterou jste zadali pro Group.
Ve složce zabezpečení
Zadejte následující kód, odpovídajícím způsobem změňte yourGroupId
a pak soubor uložte a zavřete:
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)
;
}
}
Zkopírujte soubor home.html z ukázky spring-cloud-azure-starter-active-directory-b2c: aad-b2c-web-application do src/main/resources/templatesa nahraďte ${your-profile-edit-user-flow}
a ${your-password-reset-user-flow}
názvy toků uživatelů, které jste vytvořili dříve.
Otevřete příkazový řádek a změňte adresář do složky, ve které se nachází soubor pom.xml vaší aplikace.
Sestavte aplikaci Spring Boot pomocí Mavenu a spusťte ji. například:
Poznámka
Je velmi důležité, aby čas podle systémových hodin, pod kterými běží místní aplikace Spring Boot, byl přesný. Při použití OAuth 2.0 je velmi malá tolerance nerovnoměrné distribuce hodin. Již tři minuty nepřesnosti mohou způsobit selhání přihlášení s chybou podobnou [invalid_id_token] An error occurred while attempting to decode the Jwt: Jwt used before 2020-05-19T18:52:10Z
. V době psaní tohoto textu time.gov ukazuje, jak moc se vaše hodiny liší od skutečného času. Aplikace byla úspěšně spuštěna s posunem o +0,019 sekundy.
mvn -DskipTests clean package
mvn -DskipTests spring-boot:run
Po sestavení a spuštění aplikace Maven otevřete http://localhost:8080/
ve webovém prohlížeči; měli byste být přesměrováni na přihlašovací stránku.
Vyberte odkaz s textem souvisejícím s přihlášením. Měli byste být přesměrováni na Azure AD B2C a zahájit proces ověřování.
Po úspěšném přihlášení by se měl zobrazit ukázkový příklad home page
z prohlížeče.
Následující části popisují, jak vyřešit některé problémy, se kterými se můžete setkat.
Při spuštění ukázky se může zobrazit výjimka se zprávou Missing attribute 'name' in attributes
. Protokol pro tuto výjimku bude vypadat podobně jako následující výstup:
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]
Pokud se zobrazí tato chyba, pečlivě zkontrolujte pracovní postup uživatele, který jste vytvořili v Kurzu: Vytváření toků uživatelů v azure Active Directory B2C. Při vytváření uživatelského pracovního postupu, pro Atributy uživatele a deklarace identity, nezapomeňte zvolit atributy a deklarace identity pro zobrazovaný název. Nezapomeňte také správně nakonfigurovat user-name-attribute-name
v souboru application.yml.
Příčinou tohoto problému je pravděpodobně znečisťované soubory cookie pro localhost
. Vyčistěte soubory cookie pro localhost
a zkuste to znovu.
V tomto kurzu jste vytvořili novou webovou aplikaci v Javě pomocí úvodní sady Azure Active Directory B2C, nakonfigurovali jste nového tenanta Azure AD B2C a zaregistrovali jste v něm novou aplikaci a pak jste aplikaci nakonfigurovali tak, aby používala poznámky a třídy Spring k ochraně webové aplikace.
Pokud už je nepotřebujete, pomocí webu Azure Portal odstraňte prostředky vytvořené v tomto článku, abyste se vyhnuli neočekávaným poplatkům.
Další informace o Springu a Azure najdete v centru dokumentace Spring on Azure.
Události
Vytváření inteligentních aplikací
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatŠkolení
Modul
Přihlášení uživatelů pomocí Microsoft Entra ID ve webové aplikaci v Javě - Training
Zjistěte, jak ověřovat uživatele pomocí Microsoft Entra ID a získat autorizovaný přístup k datům ve webové aplikaci v Javě pomocí knihovny Microsoft Authentication Library.
Certifikace
Microsoft Certified: Přidružení správce identit a přístupu - Certifications
Předveďte funkce Microsoft Entra ID pro modernizaci řešení identit, implementaci hybridních řešení a implementaci zásad správného řízení identit.
Dokumentace
Zabezpečení aplikací Spring Boot pomocí Azure Active Directory B2C - Java on Azure
Ukazuje, jak vyvíjet webovou aplikaci Java Spring Boot, která podporuje přihlašování pomocí Azure Active Directory B2C.
Zabezpečení rozhraní REST API pomocí Spring Cloud Azure - Java on Azure
Ukazuje, jak zabezpečit rozhraní REST API pomocí Microsoft Entra ID.
Úvodní sada Spring Boot pro příručku pro vývojáře Microsoft Entra - Java on Azure
Tato příručka popisuje funkce, problémy, alternativní řešení a diagnostické kroky, o které byste měli vědět při použití úvodní sady Microsoft Entra.