Zabezpieczanie aplikacji Java Spring Boot przy użyciu ról i oświadczeń ról
W tym artykule przedstawiono aplikację internetową Java Spring Boot korzystającą z biblioteki klienta Microsoft Entra ID Spring Boot Starter dla języka Java na potrzeby uwierzytelniania, autoryzacji i pozyskiwania tokenów. Aplikacja używa protokołu OpenID Connect do logowania użytkowników i ogranicza dostęp do niektórych tras przy użyciu ról aplikacji identyfikatora firmy Microsoft (ról aplikacji) na potrzeby autoryzacji.
Role aplikacji, wraz z grupami zabezpieczeń, są popularnym sposobem implementowania autoryzacji. Korzystając z kontroli dostępu opartej na rolach (RBAC) z rolami aplikacji i oświadczeniami ról, można bezpiecznie wymusić zasady autoryzacji przy minimalnym nakładzie pracy. Innym podejściem jest użycie grup identyfikatorów i oświadczeń grup firmy Microsoft. Grupy identyfikatorów i role aplikacji firmy Microsoft nie wykluczają się wzajemnie. Można ich użyć do zapewnienia szczegółowej kontroli dostępu.
Aby zapoznać się z filmem wideo obejmującym podobny scenariusz, zobacz Implementowanie autoryzacji w aplikacjach przy użyciu ról aplikacji, grup zabezpieczeń, zakresów i ról katalogu.
Aby uzyskać więcej informacji o sposobie działania protokołów w tym scenariuszu i innych scenariuszach, zobacz Uwierzytelnianie a autoryzacja.
Na poniższym diagramie przedstawiono topologię aplikacji:
Aplikacja używa biblioteki klienta Microsoft Entra ID Spring Boot Starter dla języka Java do logowania użytkownika i uzyskiwania tokenu identyfikatora z identyfikatora Entra firmy Microsoft. Token identyfikatora zawiera oświadczenie ról. Aplikacja sprawdza wartość tego oświadczenia, aby określić strony, do których stron użytkownik ma uprawnienia dostępu.
Tego rodzaju autoryzacja jest implementowana przy użyciu kontroli dostępu opartej na rolach. W przypadku kontroli dostępu opartej na rolach administrator udziela uprawnień do ról, a nie poszczególnym użytkownikom ani grupom. Administrator może następnie przypisywać role do różnych użytkowników i grup, aby kontrolować, kto ma dostęp do określonej zawartości i funkcji.
Ta przykładowa aplikacja definiuje następujące dwie role aplikacji:
PrivilegedAdmin
: Autoryzowany do uzyskiwania dostępu tylko do administratorów i stron Użytkownicy regularni.RegularUser
: autoryzowany do uzyskiwania dostępu do strony Użytkownicy regularni .
Te role aplikacji są definiowane w witrynie Azure Portal w manifeście rejestracji aplikacji. Gdy użytkownik loguje się do aplikacji, identyfikator Entra firmy Microsoft emituje oświadczenie ról dla każdej roli przyznanej indywidualnie użytkownikowi w formie członkostwa w rolach.
Użytkownicy i grupy można przypisywać do ról za pośrednictwem witryny Azure Portal.
Uwaga
Oświadczenia ról nie są obecne dla użytkowników-gości w dzierżawie, jeśli https://login.microsoftonline.com/common/
punkt końcowy jest używany jako urząd do logowania użytkowników. Musisz zalogować użytkownika do punktu końcowego dzierżawy, takiego jak https://login.microsoftonline.com/tenantid
.
Wymagania wstępne
- Zestaw JDK w wersji 15. Ten przykład został opracowany w systemie z językiem Java 15, ale może być zgodny z innymi wersjami.
- Maven 3
- Pakiet rozszerzenia Java dla programu Visual Studio Code jest zalecany do uruchamiania tego przykładu w programie Visual Studio Code.
- Dzierżawa identyfikatora entra firmy Microsoft. Aby uzyskać więcej informacji, zobacz How to get a Microsoft Entra ID tenant (Jak uzyskać dzierżawę identyfikatora entra firmy Microsoft).
- Konto użytkownika w dzierżawie microsoft Entra ID. Ten przykład nie działa z osobistym kontem Microsoft. W związku z tym jeśli zalogowałeś się do witryny Azure Portal przy użyciu konta osobistego i nie masz konta użytkownika w katalogu, musisz go utworzyć teraz.
- Visual Studio Code
- Azure Tools for Visual Studio Code
Zalecenia
- Znajomość platformy Spring Framework.
- Pewna znajomość terminalu systemu Linux/OSX.
- jwt.ms na potrzeby inspekcji tokenów.
- Program Fiddler do monitorowania aktywności sieci i rozwiązywania problemów.
- Postępuj zgodnie z blogiem Microsoft Entra ID, aby być na bieżąco z najnowszymi wydarzeniami.
Konfigurowanie przykładu
W poniższych sekcjach pokazano, jak skonfigurować przykładową aplikację.
Klonowanie lub pobieranie przykładowego repozytorium
Aby sklonować przykład, otwórz okno powłoki Bash i użyj następującego polecenia:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/roles
Alternatywnie przejdź do repozytorium ms-identity-msal-java-samples , a następnie pobierz go jako plik .zip i wyodrębnij go na dysk twardy.
Ważne
Aby uniknąć ograniczeń długości ścieżki pliku w systemie Windows, sklonuj lub wyodrębnij repozytorium do katalogu w pobliżu katalogu głównego dysku twardego.
Rejestrowanie przykładowej aplikacji w dzierżawie identyfikatora entra firmy Microsoft
W tym przykładzie istnieje jeden projekt. W poniższych sekcjach pokazano, jak zarejestrować aplikację przy użyciu witryny Azure Portal.
Wybierz dzierżawę microsoft Entra ID, w której chcesz utworzyć aplikacje
Aby wybrać dzierżawę, wykonaj następujące kroki:
Zaloguj się w witrynie Azure Portal.
Jeśli Twoje konto znajduje się w więcej niż jednej dzierżawie identyfikatora entra firmy Microsoft, wybierz swój profil w rogu witryny Azure Portal, a następnie wybierz pozycję Przełącz katalog , aby zmienić sesję na żądaną dzierżawę identyfikatora Entra firmy Microsoft.
Rejestrowanie aplikacji (java-spring-webapp-roles)
Aby zarejestrować aplikację, wykonaj następujące czynności:
Przejdź do witryny Azure Portal i wybierz pozycję Microsoft Entra ID.
Wybierz pozycję Rejestracje aplikacji w okienku nawigacji, a następnie wybierz pozycję Nowa rejestracja.
Na wyświetlonej stronie Rejestrowanie aplikacji wprowadź następujące informacje o rejestracji aplikacji:
- W sekcji Nazwa wprowadź zrozumiałą nazwę aplikacji do wyświetlania użytkownikom aplikacji — na przykład
java-spring-webapp-roles
. - W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym.
- W sekcji Identyfikator URI przekierowania (opcjonalnie) wybierz pozycję Sieć Web w polu kombi i wprowadź następujący identyfikator URI przekierowania:
http://localhost:8080/login/oauth2/code/
.
- W sekcji Nazwa wprowadź zrozumiałą nazwę aplikacji do wyświetlania użytkownikom aplikacji — na przykład
Wybierz pozycję Zarejestruj, aby utworzyć aplikację.
Na stronie rejestracji aplikacji znajdź i skopiuj wartość Identyfikator aplikacji (klienta), aby użyć jej później. Ta wartość jest używana w pliku konfiguracji aplikacji lub plikach.
Na stronie rejestracji aplikacji wybierz pozycję Certyfikaty i wpisy tajne w okienku nawigacji, aby otworzyć stronę, na której można wygenerować wpisy tajne i przekazać certyfikaty.
W sekcji Klucze tajne klienta wybierz pozycję Nowy klucz tajny klienta.
Wpisz opis — na przykład wpis tajny aplikacji.
Wybierz jeden z dostępnych czasów trwania: W ciągu 1 roku w ciągu 2 lat lub Nigdy nie wygasa.
Wybierz Dodaj. Zostanie wyświetlona wygenerowana wartość.
Skopiuj i zapisz wygenerowaną wartość do użycia w kolejnych krokach. Ta wartość jest potrzebna dla plików konfiguracji kodu. Ta wartość nie jest ponownie wyświetlana i nie można jej pobrać w żaden inny sposób. Dlatego przed przejściem do innego ekranu lub okienka pamiętaj, aby zapisać go w witrynie Azure Portal.
Definiowanie ról aplikacji
Aby zdefiniować role aplikacji, wykonaj następujące kroki:
Nadal w tej samej rejestracji aplikacji wybierz pozycję Role aplikacji w okienku nawigacji.
Wybierz pozycję Utwórz rolę aplikacji, a następnie wprowadź następujące wartości:
- W polu Nazwa wyświetlana wprowadź odpowiednią nazwę — na przykład PrivilegedAdmin.
- W obszarze Dozwolone typy elementów członkowskich wybierz pozycję Użytkownik.
- W polu Wartość wprowadź wartość PrivilegedAdmin.
- W polu Opis wprowadź wartość PrivilegedAdmins, którzy mogą wyświetlić stronę administratora.
Wybierz pozycję Utwórz rolę aplikacji, a następnie wprowadź następujące wartości:
- W polu Nazwa wyświetlana wprowadź odpowiednią nazwę — na przykład RegularUser.
- W obszarze Dozwolone typy elementów członkowskich wybierz pozycję Użytkownik.
- W polu Wartość wprowadź wartość RegularUser.
- W polu Opis wprowadź wartość RegularUsers, którzy mogą wyświetlić stronę użytkownika.
Wybierz pozycję Zastosuj, aby zapisać zmiany.
Przypisywanie użytkowników do ról aplikacji
Aby dodać użytkowników do zdefiniowanej wcześniej roli aplikacji, postępuj zgodnie z wytycznymi w tym miejscu: Przypisywanie użytkowników i grup do ról.
Konfigurowanie aplikacji (java-spring-webapp-roles) do korzystania z rejestracji aplikacji
Aby skonfigurować aplikację, wykonaj następujące kroki:
Uwaga
W poniższych krokach ClientID
jest to samo co Application ID
lub AppId
.
Otwórz projekt w środowisku IDE.
Otwórz plik src\main\resources\application.yml.
Znajdź symbol zastępczy
Enter_Your_Tenant_ID_Here
i zastąp istniejącą wartość identyfikatorem dzierżawy firmy Microsoft Entra.Znajdź symbol zastępczy
Enter_Your_Client_ID_Here
i zastąp istniejącą wartość identyfikatorem aplikacji lubclientId
java-spring-webapp-roles
aplikacją skopiowaną z witryny Azure Portal.Znajdź symbol zastępczy
Enter_Your_Client_Secret_Here
i zastąp istniejącą wartość wartością zapisaną podczas tworzeniajava-spring-webapp-roles
kopii z witryny Azure Portal.Otwórz plik src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootapplication/Sample.Controller.java .
Znajdź odwołania do
PrivilegedAdmin
ról aplikacji iRegularUser
w tym pliku. W razie potrzeby zmień je, aby odzwierciedlały nazwy ról aplikacji wybrane w poprzednich krokach.
Uruchamianie aplikacji przykładowej
W poniższych sekcjach pokazano, jak wdrożyć przykład w usłudze Azure Container Apps.
Wymagania wstępne
- Konto Azure. Jeśli jej nie masz, utwórz bezpłatne konto. Aby kontynuować, musisz mieć uprawnienie Współautor lub Właściciel w subskrypcji platformy Azure. Aby uzyskać więcej informacji, zobacz przypisywanie ról Azure za pomocą portalu Azure.
- Interfejs wiersza polecenia platformy Azure.
- Rozszerzenie interfejsu wiersza polecenia usługi Azure Container Apps, wersja
0.3.47
lub nowsza. Aby zainstalować najnowszą wersję, użyjaz extension add --name containerapp --upgrade --allow-preview
polecenia . - Zestaw Java Development Kit w wersji 17 lub nowszej.
- Maven.
Przygotowywanie projektu Spring
Aby przygotować projekt, wykonaj następujące czynności:
Użyj następującego polecenia narzędzia Maven , aby skompilować projekt:
mvn clean verify
Uruchom przykładowy projekt lokalnie, używając następującego polecenia:
mvn spring-boot:run
Ustawienia
Aby zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia, uruchom następujące polecenie i postępuj zgodnie z monitami, aby ukończyć proces uwierzytelniania.
az login
Aby upewnić się, że używasz najnowszej wersji interfejsu wiersza polecenia, uruchom polecenie uaktualniania.
az upgrade
Następnie zainstaluj lub zaktualizuj rozszerzenie usługi Azure Container Apps dla interfejsu wiersza polecenia.
Jeśli podczas uruchamiania az containerapp
poleceń w interfejsie wiersza polecenia platformy Azure wystąpią błędy dotyczące brakujących parametrów, upewnij się, że masz zainstalowaną najnowszą wersję rozszerzenia Azure Container Apps.
az extension add --name containerapp --upgrade
Uwaga
Począwszy od maja 2024 r., rozszerzenia interfejsu wiersza polecenia platformy Azure domyślnie nie włączają funkcji w wersji zapoznawczej. Aby uzyskać dostęp do funkcji usługi Container Apps w wersji zapoznawczej, zainstaluj rozszerzenie Container Apps za pomocą polecenia --allow-preview true
.
az extension add --name containerapp --upgrade --allow-preview true
Teraz, po zainstalowaniu bieżącego rozszerzenia lub modułu Microsoft.App
, zarejestruj przestrzenie nazw i Microsoft.OperationalInsights
.
Uwaga
Zasoby usługi Azure Container Apps zostały zmigrowane z Microsoft.Web
przestrzeni nazw do Microsoft.App
przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Migracja przestrzeni nazw z witryny Microsoft.Web do Microsoft.App w marcu 2022 r.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Tworzenie środowiska usługi Azure Container Apps
Teraz, gdy konfiguracja interfejsu wiersza polecenia platformy Azure została ukończona, możesz zdefiniować zmienne środowiskowe używane w tym artykule.
Zdefiniuj następujące zmienne w powłoce powłoki bash.
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
Utwórz grupę zasobów.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
Utwórz środowisko z automatycznie wygenerowanym obszarem roboczym usługi Log Analytics.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Pokaż domyślną domenę środowiska aplikacji kontenera. Zanotuj tę domenę do użycia w kolejnych sekcjach.
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
Przygotowywanie aplikacji do wdrożenia
Podczas wdrażania aplikacji w usłudze Azure Container Apps adres URL przekierowania zmienia się na adres URL przekierowania wdrożonego wystąpienia aplikacji w usłudze Azure Container Apps. Wykonaj następujące kroki, aby zmienić te ustawienia w pliku application.yml :
Przejdź do pliku src\main\resources\application.yml aplikacji i zmień wartość
post-logout-redirect-uri
na nazwę domeny wdrożonej aplikacji, jak pokazano w poniższym przykładzie. Pamiętaj, aby zastąpić<API_NAME>
wartości i<default-domain-of-container-app-environment>
wartościami rzeczywistymi. Na przykład w przypadku domeny domyślnej dla środowiska aplikacji kontenera platformy Azure z poprzedniego kroku ims-identity-api
nazwy aplikacji należy użyćhttps://ms-identity-api.<default-domain>
wartościpost-logout-redirect-uri
.post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
Po zapisaniu tego pliku użyj następującego polecenia, aby ponownie skompilować aplikację:
mvn clean package
Ważne
Plik application.yml aplikacji przechowuje obecnie wartość klucza tajnego klienta w parametrze client-secret
. Nie jest dobrym rozwiązaniem, aby zachować tę wartość w tym pliku. Jeśli zatwierdzisz plik w repozytorium Git, możesz również podejmowania ryzyka. Aby zapoznać się z zalecanym podejściem, zobacz Zarządzanie wpisami tajnymi w usłudze Azure Container Apps.
Aktualizowanie rejestracji aplikacji Microsoft Entra ID
Ponieważ identyfikator URI przekierowania zmienia się w wdrożonej aplikacji w usłudze Azure Container Apps, musisz również zmienić identyfikator URI przekierowania w rejestracji aplikacji Microsoft Entra ID. Aby wprowadzić tę zmianę, wykonaj następujące czynności:
Przejdź do strony Platforma tożsamości Microsoft dla deweloperów Rejestracje aplikacji.
Użyj pola wyszukiwania, aby wyszukać rejestrację aplikacji — na przykład
java-servlet-webapp-authentication
.Otwórz rejestrację aplikacji, wybierając jej nazwę.
Wybierz Uwierzytelnianie z menu poleceń.
W sekcji Identyfikatory URI przekierowania sieci Web - wybierz pozycję Dodaj identyfikator URI.
Wypełnij identyfikator URI aplikacji, dołączając
/login/oauth2/code/
na przykładhttps://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
.Wybierz pozycję Zapisz.
Wdrażanie aplikacji
Wdróż pakiet JAR w usłudze Azure Container Apps.
Uwaga
W razie potrzeby możesz określić wersję zestawu JDK w zmiennych środowiskowych kompilacji języka Java. Aby uzyskać więcej informacji, zobacz Kompilowanie zmiennych środowiskowych dla języka Java w usłudze Azure Container Apps.
Teraz możesz wdrożyć plik WAR za pomocą polecenia interfejsu az containerapp up
wiersza polecenia.
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
Uwaga
Domyślna wersja zestawu JDK to 17. Jeśli musisz zmienić wersję zestawu JDK pod kątem zgodności z aplikacją, możesz użyć argumentu --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
, aby dostosować numer wersji.
Aby uzyskać więcej zmiennych środowiskowych kompilacji, zobacz Build environment variables for Java in Azure Container Apps (Tworzenie zmiennych środowiskowych dla języka Java w usłudze Azure Container Apps).
Weryfikowanie aplikacji
W tym przykładzie containerapp up
polecenie zawiera --query properties.configuration.ingress.fqdn
argument, który zwraca w pełni kwalifikowaną nazwę domeny (FQDN), znany również jako adres URL aplikacji. Wykonaj następujące kroki, aby sprawdzić dzienniki aplikacji w celu zbadania dowolnego problemu z wdrażaniem:
Uzyskaj dostęp do adresu URL aplikacji wyjściowej na stronie Dane wyjściowe sekcji Wdrażanie.
W okienku nawigacji na stronie Przegląd wystąpienia usługi Azure Container Apps wybierz pozycję Dzienniki, aby sprawdzić dzienniki aplikacji.
Eksplorowanie przykładu
Aby zapoznać się z przykładem, wykonaj następujące czynności:
- Zwróć uwagę na stan logowania lub wylogowania wyświetlany na środku ekranu.
- Wybierz przycisk kontekstowy w rogu. Ten przycisk odczytuje pozycję Zaloguj po pierwszym uruchomieniu aplikacji. Alternatywnie wybierz szczegóły tokenu, tylko administratorzy lub zwykłych użytkowników. Ponieważ te strony są chronione i wymagają uwierzytelniania, nastąpi automatyczne przekierowanie do strony logowania.
- Na następnej stronie postępuj zgodnie z instrukcjami i zaloguj się przy użyciu konta w dzierżawie Microsoft Entra ID.
- Na ekranie zgody zwróć uwagę na żądane zakresy.
- Po pomyślnym zakończeniu przepływu logowania powinno nastąpić przekierowanie do strony głównej , która pokazuje stan logowania — lub jedną z pozostałych stron, w zależności od tego, który przycisk wyzwolił przepływ logowania.
- Zwróć uwagę, że przycisk kontekstowy zawiera teraz pozycję Wyloguj się i wyświetla swoją nazwę użytkownika.
- Jeśli jesteś na stronie głównej, wybierz pozycję Szczegóły tokenu identyfikatora, aby wyświetlić niektóre zdekodowane oświadczenia tokenu identyfikatora, w tym role.
- Wybierz pozycję Tylko administratorzy, aby wyświetlić element
/admin_only
. Tylko użytkownicy z roląPrivilegedAdmin
aplikacji mogą wyświetlać tę stronę. W przeciwnym razie zostanie wyświetlony komunikat o niepowodzeniu autoryzacji. - Wybierz pozycję Regular Users (Regular Users ), aby wyświetlić
/regular_user
stronę. Tylko użytkownicy z roląRegularUser
aplikacji lubPrivilegedAdmin
mogą wyświetlać tę stronę. W przeciwnym razie zostanie wyświetlony komunikat o niepowodzeniu autoryzacji. - Użyj przycisku w rogu, aby się wylogować. Strona stanu odzwierciedla nowy stan.
Informacje o kodzie
W tym przykładzie pokazano, jak używać biblioteki klienta Microsoft Entra ID Spring Boot Starter dla języka Java do logowania użytkowników do dzierżawy microsoft Entra ID. Przykład korzysta również z szablonów startowych Spring Oauth2 Client i Spring Web Boot. W przykładzie użyto oświadczeń z tokenu identyfikatora uzyskanego z identyfikatora firmy Microsoft w celu wyświetlenia szczegółów zalogowanego użytkownika oraz ograniczenia dostępu do niektórych stron przy użyciu oświadczenia ról do autoryzacji.
Zawartość
W poniższej tabeli przedstawiono zawartość przykładowego folderu projektu:
Plik/folder | opis |
---|---|
pom.xml | Zależności aplikacji. |
src/main/resources/templates/ | Szablony Thymeleaf dla interfejsu użytkownika. |
src/main/resources/application.yml | Konfiguracja biblioteki startowej rozruchu aplikacji i programu Microsoft Entra ID. |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Ten katalog zawiera główne klasy wejścia aplikacji, kontrolera i konfiguracji. |
.../MsIdentitySpringBootWebappApplication.java | Klasa główna. |
.../SampleController.java | Kontroler z mapowaniami punktów końcowych. |
.../SecurityConfig.java | Konfiguracja zabezpieczeń — na przykład trasy wymagają uwierzytelniania. |
.../Utilities.java | Klasa narzędzia — na przykład filtruj oświadczenia tokenu identyfikatora. |
CHANGELOG.md | Lista zmian w przykładzie. |
CONTRIBUTING.md | Wskazówki dotyczące współtworzenia przykładu. |
LICENCJA | Licencja dla przykładu. |
Oświadczenia tokenu identyfikatora
Aby wyodrębnić szczegóły tokenu, aplikacja korzysta z obiektów i OidcUser
obiektów spring security AuthenticationPrincipal
w mapowaniu żądania, jak pokazano w poniższym przykładzie. Zobacz Przykładowy kontroler, aby uzyskać szczegółowe informacje na temat sposobu korzystania z oświadczeń tokenu identyfikatora.
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Map<String, Object> claims = principal.getIdToken().getClaims();
}
Przetwarzanie oświadczenia ról w tokenie identyfikatora
Oświadczenie ról tokenu zawiera nazwy ról przypisanych do zalogowanego użytkownika, jak pokazano w poniższym przykładzie:
{
...
"roles": [
"PrivilegedAdmin",
"RegularUser",]
...
}
Typowy sposób uzyskiwania dostępu do nazw ról jest udokumentowany w sekcji Oświadczenia tokenu identyfikatora .
Program Microsoft Entra ID Boot Starter w wersji 3.3 lub nowszej analizuje również oświadczenia ról automatycznie i dodaje każdą rolę do logowania użytkownika Authorities
, prefiksując każdy z nich przy użyciu ciągu APPROLE_
. Ta konfiguracja umożliwia deweloperom korzystanie z ról aplikacji z adnotacjami warunków spring PrePost
przy użyciu hasAuthority
metody . Na przykład w SampleController.java można znaleźć następujące @PreAuthorize
warunki:
@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('APPROLE_PrivilegedAdmin')")
public String adminOnly(Model model) {
// restrict to users who have PrivilegedAdmin app role only
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('APPROLE_PrivilegedAdmin','APPROLE_RegularUser')")
public String regularUser(Model model) {
// restrict to users who have any of RegularUser or PrivilegedAdmin app roles
}
Poniższy kod pobiera pełną listę urzędów dla danego użytkownika:
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}
Linki logowania i wylogowywanie
W przypadku logowania aplikacja wysyła żądanie do punktu końcowego logowania Microsoft Entra ID automatycznie skonfigurowanego przez bibliotekę klienta Microsoft Entra ID Spring Boot Starter dla języka Java, jak pokazano w poniższym przykładzie:
<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>
W przypadku wylogowania aplikacja wysyła żądanie POST do punktu końcowego logout
, jak pokazano w poniższym przykładzie:
<form action="#" th:action="@{/logout}" method="post">
<input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
Elementy interfejsu użytkownika zależne od uwierzytelniania
Aplikacja ma prostą logikę na stronach szablonu interfejsu użytkownika do określania zawartości do wyświetlenia na podstawie tego, czy użytkownik jest uwierzytelniony, jak pokazano w poniższym przykładzie przy użyciu tagów Spring Security Thymeleaf:
<div sec:authorize="isAuthenticated()">
this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
this content only shows to not-authenticated users
</div>
Ochrona tras za pomocą polecenia AADWebSecurityConfigurerAdapter
Domyślnie aplikacja chroni strony Szczegóły tokenu identyfikatora, Tylko administratorzy i Użytkownicy regularni , aby tylko zalogowani użytkownicy mogli uzyskiwać do nich dostęp. Aplikacja konfiguruje te trasy z app.protect.authenticated
właściwości z pliku application.yml . Aby skonfigurować określone wymagania aplikacji, możesz rozszerzyć AADWebSecurityConfigurationAdapter
w jednej z klas. Aby zapoznać się z przykładem, zobacz klasę SecurityConfig tej aplikacji, pokazaną w następującym kodzie:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
@Value( "${app.protect.authenticated}" )
private String[] protectedRoutes;
@Override
public void configure(HttpSecurity http) throws Exception {
// use required configuration form AADWebSecurityAdapter.configure:
super.configure(http);
// add custom configuration:
http.authorizeRequests()
.antMatchers(protectedRoutes).authenticated() // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
.antMatchers("/**").permitAll(); // allow all other routes.
}
}
Więcej informacji
- dokumentacja Platforma tożsamości Microsoft
- Omówienie biblioteki Microsoft Authentication Library (MSAL)
- Szybki start: Rejestrowanie aplikacji za pomocą platformy tożsamości firmy Microsoft
- Szybki start: konfigurowanie aplikacji klienckiej w celu uzyskiwania dostępu do internetowych interfejsów API
- Omówienie środowisk wyrażania zgody aplikacji Entra ID firmy Microsoft
- Omówienie zgody użytkownika i administratora
- Obiekty aplikacji i jednostki usługi w usłudze Azure Active Directory
- Chmury krajowe
- Przykłady kodu biblioteki MSAL
- Biblioteka klienta Spring Boot Starter usługi Azure Active Directory dla języka Java
- Biblioteka uwierzytelniania firmy Microsoft dla języka Java (MSAL4J)
- MSAL4J Wiki
- Tokeny identyfikatorów
- Tokeny dostępu w Platforma tożsamości Microsoft
Aby uzyskać więcej informacji na temat sposobu działania protokołów OAuth 2.0 w tym scenariuszu i innych scenariuszach, zobacz Scenariusze uwierzytelniania dla identyfikatora Entra firmy Microsoft.