Spring Cloud-ondersteuning voor Azure voor Spring Security
Dit artikel is van toepassing op: ✔️ versie 4.14.0 ✔️ versie 5.8.0
In dit artikel wordt beschreven hoe Spring Cloud Azure en Spring Security samen kunnen worden gebruikt.
Spring Security met Microsoft Entra-id
Wanneer u een webtoepassing bouwt, zijn identiteits- en toegangsbeheer altijd fundamentele onderdelen.
Azure biedt een geweldig platform om uw toepassingsontwikkelingstraject te democratiseren, omdat het niet alleen een cloudidentiteitsservice biedt, maar ook een diepgaande integratie met de rest van het Azure-ecosysteem.
Spring Security heeft het eenvoudig gemaakt om uw Spring-toepassingen te beveiligen met krachtige abstracties en uitbreidbare interfaces. Maar net zo krachtig als het Spring-framework kan zijn, is het niet afgestemd op een specifieke id-provider.
De spring-cloud-azure-starter-active-directory
biedt de meest optimale manier om uw webtoepassing te verbinden met een Microsoft Entra ID -tenant (Microsoft Entra ID voor korte tijd) en uw resourceserver te beveiligen met Microsoft Entra ID. Het maakt gebruik van het Oauth 2.0-protocol om webtoepassingen en bronservers te beveiligen.
Toegang tot een webtoepassing
In dit scenario wordt de OAuth 2.0-autorisatiecodestroom gebruikt om u aan te melden bij een gebruiker met een Microsoft-account.
Systeemdiagram
Vereiste resources maken in Azure
Lees quickstart: Een toepassing registreren bij het Microsoft Identity Platform.
Maak een app-registratie. Haal
AZURE_TENANT_ID
,AZURE_CLIENT_ID
enAZURE_CLIENT_SECRET
.Stel in
redirect URI
opAPPLICATION_BASE_URI/login/oauth2/code/
- bijvoorbeeldhttp://localhost:8080/login/oauth2/code/
. De staart/
is vereist.
Vereiste afhankelijkheden toevoegen
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
Vereiste eigenschappen toevoegen
spring:
cloud:
azure:
active-directory:
enabled: true
profile:
tenant-id: <tenant>
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
Start nu uw toepassing en open uw toepassing via de browser. U wordt omgeleid naar de aanmeldingspagina van Microsoft.
Geavanceerd gebruik
Extra beveiligingsconfiguraties toevoegen
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2LoginSecurityConfig extends AadWebSecurityConfigurerAdapter {
/**
* Add configuration logic as needed.
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests()
.anyRequest().authenticated();
// Do some custom configuration
}
}
Toegang autoriseren door app-rollen
Vereiste resources maken in Azure:
Lees App-rollen toevoegen aan uw toepassing en ontvangen deze in het token.
Maak een app-rol met de volgende parameters:
- Weergavenaam: Beheer
- Toegestane lidtypen: Gebruikers/groepen
- Waarde: Beheer
- Wilt u deze app-rol inschakelen: ja
Notitie
Als u op rollen gebaseerd toegangsbeheer voor apps wilt gebruiken, kunt u geen groepsnamen in de role
claim plaatsen. Zie de sectie Optionele claims configureren van groepen van optionele claims opgeven voor uw app voor meer informatie.
Beveilig de specifieke methode.
class Demo {
@GetMapping("Admin")
@ResponseBody
@PreAuthorize("hasAuthority('APPROLE_Admin')")
public String admin() {
return "Admin message";
}
}
Toegang autoriseren op groepsnaam of groeps-id
Gerelateerde configuratie-eigenschappen toevoegen.
spring:
cloud:
azure:
active-directory:
enabled: true
user-group:
allowed-group-names: group1_name_1, group2_name_2
# 1. If allowed-group-ids == all, then all group ID will take effect.
# 2. If "all" is used, we should not configure other group ids.
# 3. "all" is only supported for allowed-group-ids, not supported for allowed-group-names.
allowed-group-ids: group_id_1, group_id_2
Beveilig de specifieke methode.
@Controller
public class RoleController {
@GetMapping("group1")
@ResponseBody
@PreAuthorize("hasRole('ROLE_group1')")
public String group1() {
return "group1 message";
}
@GetMapping("group2")
@ResponseBody
@PreAuthorize("hasRole('ROLE_group2')")
public String group2() {
return "group2 message";
}
@GetMapping("group1Id")
@ResponseBody
@PreAuthorize("hasRole('ROLE_<group1-id>')")
public String group1Id() {
return "group1Id message";
}
@GetMapping("group2Id")
@ResponseBody
@PreAuthorize("hasRole('ROLE_<group2-id>')")
public String group2Id() {
return "group2Id message";
}
}
National Azure gebruiken in plaats van Global Azure
Met uitzondering van de globale Azure-cloud wordt Microsoft Entra ID geïmplementeerd in de volgende nationale clouds:
Azure Government
Azure China 21Vianet
Azure Duitsland
Hier volgt een voorbeeld met behulp van Azure China 21Vianet.
spring:
cloud:
azure:
active-directory:
enabled: true
base-uri: https://login.partner.microsoftonline.cn
graph-base-uri: https://microsoftgraph.chinacloudapi.cn
Zie Nationale cloudimplementaties voor meer informatie.
Omleidings-URI-sjabloon configureren
Ontwikkelaars kunnen de omleidings-URI aanpassen.
Voeg eigenschappen toe redirect-uri-template
aan het bestand application.yml .
spring:
cloud:
azure:
active-directory:
enabled: true
redirect-uri-template: ${REDIRECT-URI-TEMPLATE}
Update redirect-uri
in Azure Portal.
Nadat we hebben ingesteld redirect-uri-template
, moeten we de beveiligingsbouwer bijwerken:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2LoginSecurityConfig extends AadWebSecurityConfigurerAdapter {
/**
* Add configuration logic as needed.
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.oauth2Login()
.loginProcessingUrl("${REDIRECT-URI-TEMPLATE}")
.and()
.authorizeRequests()
.anyRequest().authenticated();
}
}
Verbinding maken naar Microsoft Entra-id via proxy
Als u microsoft Entra-id via proxy wilt verbinden, geeft u een RestTemplateCustomizer
bean op zoals in het volgende voorbeeld:
@Configuration
class DemoConfiguration {
@Bean
public RestTemplateCustomizer proxyRestTemplateCustomizer() {
return (RestTemplate restTemplate) -> {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_SERVER_HOST, PROXY_SERVER_PORT));
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setProxy(proxy);
restTemplate.setRequestFactory(requestFactory);
};
}
}
Voorbeelden
Voorbeeldproject: aad-web-application.
Webtoepassing die toegang heeft tot resourceservers
Systeemdiagram
Vereiste resources maken in Azure
Lees quickstart: Een toepassing registreren bij het Microsoft Identity Platform.
Maak een app-registratie. Haal
AZURE_TENANT_ID
,AZURE_CLIENT_ID
enAZURE_CLIENT_SECRET
.Stel
redirect URI
in opAPPLICATION_BASE_URI/login/oauth2/code/
, bijvoorbeeldhttp://localhost:8080/login/oauth2/code/
. De staart/
is vereist.
Vereiste afhankelijkheden toevoegen
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
Vereiste eigenschappen toevoegen
spring:
cloud:
azure:
active-directory:
enabled: true
profile:
tenant-id: <tenant>
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
authorization-clients:
graph:
scopes: https://graph.microsoft.com/Analytics.Read, email
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
graph
Hier is de naam vanOAuth2AuthorizedClient
, scopes
betekent dit de bereiken die nodig zijn om toestemming te geven bij het aanmelden.
OAuth2AuthorizedClient gebruiken in uw toepassing
public class Demo {
@GetMapping("/graph")
@ResponseBody
public String graph(
@RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graphClient) {
// toJsonString() is just a demo.
// oAuth2AuthorizedClient contains access_token. We can use this access_token to access resource server.
return toJsonString(graphClient);
}
}
Start nu uw toepassing en open uw toepassing in de browser. Vervolgens wordt u omgeleid naar de aanmeldingspagina van Microsoft.
Geavanceerd gebruik
Clientreferentiestroom
De standaardstroom is de autorisatiecodestroom, als u de stroom voor clientreferenties wilt gebruiken, kunt u als volgt configureren:
spring:
cloud:
azure:
active-directory:
enabled: true
profile:
tenant-id: <tenant>
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
authorization-clients:
graph:
authorization-grant-type: client_credentials # Change type to client_credentials
scopes: https://graph.microsoft.com/Analytics.Read, email
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
Toegang tot meerdere resourceservers
In één webtoepassing hebt u toegang tot meerdere resourceservers door als volgt te configureren:
spring:
cloud:
azure:
active-directory:
enabled: true
profile:
tenant-id: <tenant>
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
authorization-clients:
resource-server-1:
scopes: # Scopes for resource-server-1
resource-server-2:
scopes: # Scopes for resource-server-2
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
Vervolgens kunt u deze gebruiken OAuth2AuthorizedClient
in een toepassing zoals deze
public class Demo {
@GetMapping("/resource-server-1")
@ResponseBody
public String graph(
@RegisteredOAuth2AuthorizedClient("resource-server-1") OAuth2AuthorizedClient client) {
return callResourceServer1(client);
}
@GetMapping("/resource-server-2")
@ResponseBody
public String graph(
@RegisteredOAuth2AuthorizedClient("resource-server-2") OAuth2AuthorizedClient client) {
return callResourceServer2(client);
}
}
Voorbeelden
Voorbeeldproject: aad-web-application.
Toegang tot een resourceserver
Dit scenario biedt geen ondersteuning voor aanmelding. Beveilig de server alleen door het toegangstoken te valideren. Als het toegangstoken geldig is, dient de server de aanvraag.
Systeemdiagram
Vereiste resources maken in Azure
Lees quickstart: Een toepassing registreren bij het Microsoft Identity Platform.
Maak een app-registratie. Haal
AZURE_CLIENT_ID
.Lees snelstart: Een toepassing configureren om een web-API beschikbaar te maken.
Een web-API beschikbaar maken met een bereik met de naam
Scope-1
.
Vereiste afhankelijkheden toevoegen
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
</dependencies>
Vereiste eigenschappen toevoegen
spring:
cloud:
azure:
active-directory:
enabled: true
credential:
client-id: ${AZURE_CLIENT_ID}
Start nu uw toepassing en open de web-API van uw toepassing.
U krijgt 401 zonder toegangstoken.
Toegang tot uw toepassing met een toegangstoken. De volgende claims in het toegangstoken worden gevalideerd:
iss
: Het toegangstoken moet worden uitgegeven door Microsoft Entra ID.nbf
: De huidige tijd kan niet eerdernbf
zijn.exp
: De huidige tijd kan niet naexp
.aud
: Indienspring.cloud.azure.active-directory.credential.client-id
ofspring.cloud.azure.active-directory.credential.app-id-uri
geconfigureerd, moet de doelgroep gelijk zijn aan de geconfigureerdeclient-id
ofapp-id-uri
. Als de twee eigenschappen niet zijn geconfigureerd, wordt deze claim niet gevalideerd.
Zie MS-documenten over toegangstokens voor Microsoft Identity Platform voor meer informatie over het toegangstoken.
Geavanceerd gebruik
Extra beveiligingsconfiguraties toevoegen
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2ResourceServerSecurityConfig extends AadResourceServerWebSecurityConfigurerAdapter {
/**
* Add configuration logic as needed.
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests((requests) -> requests.anyRequest().authenticated());
}
}
Machtiging valideren op bereik
Maak vereiste resources in Azure.
Lees snelstart: Een toepassing configureren om een web-API beschikbaar te maken.
Een web-API beschikbaar maken met een bereik met de naam
Scope1
.
Beveilig de specifieke methode.
class Demo { @GetMapping("scope1") @ResponseBody @PreAuthorize("hasAuthority('SCOPE_Scope1')") public String scope1() { return "Congratulations, you can access `scope1` endpoint."; } }
Als dit het toegangseindpunt /scope1
is, worden de volgende claims in het toegangstoken gevalideerd:
scp
: de waarde moet bevattenScope1
.
Machtiging valideren per app-rollen
Maak vereiste resources in Azure.
Lees App-rollen toevoegen aan uw toepassing en ontvangen deze in het token.
Maak een app-rol met de volgende parameters:
- Weergavenaam: AppRole1
- Toegestane lidtypen: Gebruikers/groepen
- Waarde: AppRole1
- Wilt u deze app-rol inschakelen: ja
Beveilig de specifieke methode.
class Demo { @GetMapping("app-role1") @ResponseBody @PreAuthorize("hasAuthority('APPROLE_AppRole1')") public String appRole1() { return "Congratulations, you can access `app-role1` endpoint."; } }
Als dit het toegangseindpunt /app-role1
is, worden de volgende claims in het toegangstoken gevalideerd:
roles
: de waarde moet bevattenAppRole1
.
JWT-clientverificatie gebruiken
Als u een JSON-webtoken (JWT) wilt gebruiken voor clientverificatie, gebruikt u de volgende stappen:
- Zie de sectie Uw certificaat registreren bij Het Microsoft Identity Platform van referenties voor verificatiecertificaten voor microsoft-identiteitsplatformtoepassingen.
- Upload een PEM-certificaat naar de toepassing die is geregistreerd in Azure Portal.
- Configureer het certificaatpad en wachtwoord van een . PFX of . P12-certificaat .
- Voeg de eigenschapsconfiguratie
spring.cloud.azure.active-directory.authorization-clients.azure.client-authentication-method=private_key_jwt
toe aan de client die moet worden geverifieerd via JWT-clientverificatie.
Het volgende voorbeeldconfiguratiebestand is bedoeld voor een webtoepassingsscenario. De certificaatgegevens worden geconfigureerd in de globale eigenschappen.
spring:
cloud:
azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CERTIFICATE_PATH}
client-certificate-password: ${AZURE_CERTIFICATE_PASSWORD}
profile:
tenant-id: <tenant>
active-directory:
enabled: true
user-group:
allowed-group-names: group1,group2
allowed-group-ids: <group1-id>,<group2-id>
post-logout-redirect-uri: http://localhost:8080
authorization-clients:
azure:
client-authentication-method: private_key_jwt
arm:
client-authentication-method: private_key_jwt
scopes: https://management.core.windows.net/user_impersonation
graph:
client-authentication-method: private_key_jwt
scopes:
- https://graph.microsoft.com/User.Read
- https://graph.microsoft.com/Directory.Read.All
webapiA:
client-authentication-method: private_key_jwt
scopes:
- ${WEB_API_A_APP_ID_URL}/Obo.WebApiA.ExampleScope
webapiB:
client-authentication-method: private_key_jwt
scopes:
- ${WEB_API_B_APP_ID_URL}/.default
authorization-grant-type: client_credentials
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
U kunt ook de certificaatgegevens in de active-directory
service-eigenschappen configureren, zoals in dit voorbeeld wordt weergegeven:
spring:
cloud:
azure:
active-directory:
enabled: true
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CERTIFICATE_PATH}
client-certificate-password: ${AZURE_CERTIFICATE_PASSWORD}
profile:
tenant-id: <tenant>
user-group:
allowed-group-names: group1,group2
allowed-group-ids: <group1-id>,<group2-id>
post-logout-redirect-uri: http://localhost:8080
authorization-clients:
azure:
client-authentication-method: private_key_jwt
arm:
client-authentication-method: private_key_jwt
scopes: https://management.core.windows.net/user_impersonation
graph:
client-authentication-method: private_key_jwt
scopes:
- https://graph.microsoft.com/User.Read
- https://graph.microsoft.com/Directory.Read.All
webapiA:
client-authentication-method: private_key_jwt
scopes:
- ${WEB_API_A_APP_ID_URL}/Obo.WebApiA.ExampleScope
webapiB:
client-authentication-method: private_key_jwt
scopes:
- ${WEB_API_B_APP_ID_URL}/.default
authorization-grant-type: client_credentials
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
Verbinding maken naar Microsoft Entra-id via proxy
Als u Microsoft Entra-id via proxy wilt verbinden, geeft u een RestTemplateCustomizer
bean op. Zie de Verbinding maken ing to Microsoft Entra ID via de proxysectie voor meer informatie.
Voorbeelden
Voorbeeldproject: aad-resource-server.
Resourceserver die andere resourceservers bezoekt
Systeemdiagram
Vereiste resources maken in Azure
Lees quickstart: Een toepassing registreren bij het Microsoft Identity Platform.
Maak een app-registratie. Haal
AZURE_TENANT_ID
,AZURE_CLIENT_ID
enAZURE_CLIENT_SECRET
.
Vereiste afhankelijkheden toevoegen
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
Vereiste eigenschappen toevoegen
spring:
cloud:
azure:
active-directory:
enabled: true
profile:
tenant-id: <tenant>
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
authorization-clients:
graph:
scopes:
- https://graph.microsoft.com/User.Read
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
OAuth2AuthorizedClient gebruiken in uw toepassing
public class SampleController {
@GetMapping("call-graph")
public String callGraph(@RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graph) {
return callMicrosoftGraphMeEndpoint(graph);
}
}
Voorbeelden
Voorbeeldproject: aad-resource-server-obo.
Webtoepassing en resourceserver in één toepassing
Vereiste resources maken in Azure
Lees quickstart: Een toepassing registreren bij het Microsoft Identity Platform.
Maak een app-registratie. Haal
AZURE_TENANT_ID
,AZURE_CLIENT_ID
enAZURE_CLIENT_SECRET
.
Vereiste afhankelijkheden toevoegen
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
Vereiste eigenschappen toevoegen
Stel de eigenschap in spring.cloud.azure.active-directory.application-type
op web_application_and_resource_server
en geef het autorisatietype op voor elke autorisatieclient.
spring:
cloud:
azure:
active-directory:
enabled: true
profile:
tenant-id: <tenant>
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
app-id-uri: ${WEB_API_ID_URI}
application-type: web_application_and_resource_server # This is required.
authorization-clients:
graph:
authorizationGrantType: authorization_code # This is required.
scopes:
- https://graph.microsoft.com/User.Read
- https://graph.microsoft.com/Directory.Read.All
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
SecurityFilterChain definiëren
Configureer meerdere SecurityFilterChain
exemplaren. AadWebApplicationAndResourceServerConfig
bevat twee configuraties voor beveiligingsfilterketens voor resourceserver en webtoepassing.
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadWebApplicationAndResourceServerConfig {
@Order(1)
@Configuration
public static class ApiWebSecurityConfigurationAdapter extends AadResourceServerWebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
// All the paths that match `/api/**`(configurable) work as `Resource Server`, other paths work as `Web application`.
http.antMatcher("/api/**")
.authorizeRequests().anyRequest().authenticated();
}
}
@Configuration
public static class HtmlWebSecurityConfigurerAdapter extends AadWebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
// @formatter:off
http.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated();
// @formatter:on
}
}
}
Configuratie
Configureerbare eigenschappen van spring-cloud-azure-starter-active-directory:
Name | Beschrijving |
---|---|
spring.cloud.azure.active-directory.app-id-uri | App-id-URI die kan worden gebruikt in de claim 'aud' van een id_token. |
spring.cloud.azure.active-directory.application-type | Type van de Microsoft Entra-toepassing. |
spring.cloud.azure.active-directory.authenticate-additional-parameters | Voeg extra parameters toe aan de autorisatie-URL. |
spring.cloud.azure.active-directory.authorization-clients | De OAuth2-autorisatieclients. |
spring.cloud.azure.active-directory.credential.client-id | Client-id die moet worden gebruikt bij het uitvoeren van service-principalverificatie met Azure. |
spring.cloud.azure.active-directory.credential.client-secret | Clientgeheim dat moet worden gebruikt bij het uitvoeren van service-principal-verificatie met Azure. |
spring.cloud.azure.active-directory.jwk-set-cache-levensduur | De levensduur van de in de cache opgeslagen JWK die is ingesteld voordat deze verloopt, is standaard 5 minuten. |
spring.cloud.azure.active-directory.jwk-set-cache-refresh-time | De vernieuwingstijd van de in de cache opgeslagen JWK die is ingesteld voordat deze verloopt, is standaard 5 minuten. |
spring.cloud.azure.active-directory.jwt-connect-timeout | Verbinding maken ion time-out voor de externe URL-aanroep van JWKSet. |
spring.cloud.azure.active-directory.jwt-read-timeout | Time-out lezen voor de externe JWKSet-URL-aanroep. |
spring.cloud.azure.active-directory.jwt-size-limit | Groottelimiet in bytes van de externe JWKSet-URL-aanroep. |
spring.cloud.azure.active-directory.post-logout-redirect-uri | De omleidings-URI na afmelding. |
spring.cloud.azure.active-directory.profile.cloud-type | Naam van de Azure-cloud waarmee verbinding moet worden gemaakt. Ondersteunde typen zijn: AZURE, AZURE_CHINA, AZURE_GERMANY, AZURE_US_GOVERNMENT, OTHER. |
spring.cloud.azure.active-directory.profile.environment | Eigenschappen voor Microsoft Entra-eindpunten. |
spring.cloud.azure.active-directory.profile.tenant-id | Azure-tenant-id. De toegestane tenant-id waarden zijn: common , organizations , consumers of de tenant-id. |
spring.cloud.azure.active-directory.redirect-uri-template | Omleidingseindpunt: wordt gebruikt door de autorisatieserver om antwoorden met autorisatiereferenties naar de client te retourneren via de gebruikersagent van de resource-eigenaar. De standaardwaarde is {baseUrl}/login/oauth2/code/ . |
spring.cloud.azure.active-directory.resource-server.claim-to-authority-prefix-map | Configureer welke claim wordt gebruikt voor het bouwen van GrantedAuthority en het voorvoegsel van de tekenreekswaarde van GrantedAuthority. De standaardwaarde is: 'scp' -> 'SCOPE_', 'rollen' -> 'APPROLE_'. |
spring.cloud.azure.active-directory.resource-server.principal-claim-name | Configureer welke claim in toegangstoken moet worden geretourneerd in AuthenticatedPrincipal#getName. De standaardwaarde is 'sub'. |
spring.cloud.azure.active-directory.session-stateless | Als waar is, wordt het staatloze verificatiefilter AadAppRoleStatelessAuthenticationFilter geactiveerd. De standaardwaarde is onwaar waarmee AadAuthenticationFilter wordt geactiveerd. |
spring.cloud.azure.active-directory.user-group.allowed-group-ids | De groeps-id's kunnen worden gebruikt om GrantedAuthority samen te stellen. |
spring.cloud.azure.active-directory.user-group.allowed-group-names | De groepsnamen kunnen worden gebruikt om GrantedAuthority samen te stellen. |
spring.cloud.azure.active-directory.user-group.use-transitive-members | Als 'true', gebruikt u 'v1.0/me/transitiveMemberOf' om leden op te halen. Gebruik anders 'v1.0/me/memberOf'. De standaardwaarde is false . |
spring.cloud.azure.active-directory.user-name-attribute | Bepaal welke claim de naam van de principal moet zijn. |
Hier volgen enkele voorbeelden van het gebruik van deze eigenschappen:
Toepassingstype
Het toepassingstype kan worden afgeleid van de afhankelijkheden: spring-security-oauth2-client
of spring-security-oauth2-resource-server
. Als de uitgestelde waarde niet de gewenste waarde is, kunt u het toepassingstype opgeven. Hier volgt de tabel met geldige waarden en uitgestelde waarden:
Toepassingstype van spring-cloud-azure-starter-active-directory
:
Heeft afhankelijkheid: spring-security-oauth2-client |
Heeft afhankelijkheid: spring-security-oauth2-resource-server |
Geldige waarden van het toepassingstype | Uitgestelde waarde |
---|---|---|---|
Ja | No | web_application |
web_application |
No | Ja | resource_server |
resource_server |
Ja | Ja | web_application , resource_server , resource_server_with_obo , web_application_and_resource_server |
resource_server_with_obo |
Spring Security met Azure Active Directory B2C
Azure Active Directory (Azure AD) B2C is een identiteitsbeheerservice waarmee u kunt aanpassen en controleren hoe uw klanten zich registreren en aanmelden en hoe zijn hun profielen beheren wanneer ze uw toepassingen gebruiken. Met Azure AD B2C kunt u deze acties uitvoeren terwijl u tegelijkertijd de identiteit van uw klant beschermt.
Afhankelijkheid instellen
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory-b2c</artifactId>
</dependency>
</dependencies>
Configuratie
Configureerbare eigenschappen van spring-cloud-azure-starter-active-directory-b2c:
Name | Beschrijving |
---|---|
spring.cloud.azure.active-directory.b2c.app-id-uri | App-id-URI die kan worden gebruikt in de claim aud van een token. |
spring.cloud.azure.active-directory.b2c.authenticate-additional-parameters | Aanvullende parameters voor verificatie. |
spring.cloud.azure.active-directory.b2c.authorization-clients | Geef de clientconfiguratie op. |
spring.cloud.azure.active-directory.b2c.base-uri | Basis-URI van Azure AD B2C-eindpunt. |
spring.cloud.azure.active-directory.b2c.credential | Azure AD B2C-referentiegegevens. |
spring.cloud.azure.active-directory.b2c.jwt-connect-timeout | Verbinding maken ion time-out voor de externe URL-aanroep van JWKSet. |
spring.cloud.azure.active-directory.b2c.jwt-read-timeout | Time-out lezen voor de externe JWKSet-URL-aanroep. |
spring.cloud.azure.active-directory.b2c.jwt-size-limit | Groottelimiet in bytes van de externe JWKSet-URL-aanroep. |
spring.cloud.azure.active-directory.b2c.login-flow | Geef de primaire aanmeldingsstroomsleutel op. De standaardwaarde is sign-up-or-sign-in . |
spring.cloud.azure.active-directory.b2c.logout-success-url | Omleidings-URL na afmelding. De standaardwaarde is http://localhost:8080/login . |
spring.cloud.azure.active-directory.b2c.profile | Azure AD B2C-profielgegevens. |
spring.cloud.azure.active-directory.b2c.reply-url | Antwoord-URL na het ophalen van autorisatiecode. De standaardwaarde is {baseUrl}/login/oauth2/code/ . |
spring.cloud.azure.active-directory.b2c.user-flows | Gebruikersstromen. |
spring.cloud.azure.active-directory.b2c.user-name-attribute-name-name | Kenmerknaam van gebruikersnaam. |
Raadpleeg de configuratie-eigenschappen van Spring Cloud Azure voor volledige configuraties.
Basaal gebruik
Een webtoepassing is een webtoepassing waarmee de gebruiker zich kan aanmelden met Microsoft Entra-id, terwijl een resourceserver na het valideren van access_token verkregen van Microsoft Entra ID toegang accepteert of weigert. In deze handleiding worden vier scenario's behandeld:
Toegang tot een webtoepassing.
Webtoepassing die toegang heeft tot resourceservers.
Toegang tot een resourceserver.
Resourceserver die toegang heeft tot andere resourceservers.
Gebruik 1: Toegang tot een webtoepassing
In dit scenario wordt de OAuth 2.0-autorisatiecodestroom gebruikt om u aan te melden bij een gebruiker met uw Azure AD B2C-gebruiker.
Selecteer Azure AD B2C in het portalmenu, selecteer Toepassingen en selecteer vervolgens Toevoegen.
Geef de naam van uw toepassing op (bijvoorbeeld webapp
), voeg deze toe http://localhost:8080/login/oauth2/code/
voor de antwoord-URL, noteer de toepassings-id als uw WEB_APP_AZURE_CLIENT_ID
en selecteer Opslaan.
Selecteer Sleutels in uw toepassing, selecteer Sleutel genereren om te genereren WEB_APP_AZURE_CLIENT_SECRET
en selecteer vervolgens Opslaan.
Selecteer Gebruikersstromen aan de linkerkant en selecteer vervolgens Nieuwe gebruikersstroom.
Kies Registreren of in, Profiel bewerken en Wachtwoord opnieuw instellen om respectievelijk gebruikersstromen te maken. Geef uw gebruikersstroomnaam en gebruikerskenmerken en -claims op en selecteer Vervolgens Maken.
Selecteer API-machtigingen>Toevoegen een machtiging>Microsoft API's, selecteer Microsoft Graph, selecteer Gedelegeerde machtigingen, selecteer de offline_access en openid-machtigingen en selecteer vervolgens Machtiging toevoegen om het proces te voltooien.
Beheerderstoestemming verlenen voor Graph-machtigingen.
Voeg de volgende afhankelijkheden toe aan uw pom.xml-bestand .
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-boot-starter-active-directory-b2c</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
</dependencies>
Voeg eigenschappen toe aan uw bestand application.yml met behulp van de waarden die u eerder hebt gemaakt, zoals wordt weergegeven in het volgende voorbeeld:
spring:
cloud:
azure:
active-directory:
b2c:
enabled: true
authenticate-additional-parameters:
domain_hint: xxxxxxxxx # optional
login_hint: xxxxxxxxx # optional
prompt: [login,none,consent] # optional
base-uri: ${BASE_URI}
credential:
client-id: ${WEBAPP_AZURE_CLIENT_ID}
client-secret: ${WEBAPP_AZURE_CLIENT_SECRET}
login-flow: ${LOGIN_USER_FLOW_KEY} # default to sign-up-or-sign-in, will look up the user-flows map with provided key.
logout-success-url: ${LOGOUT_SUCCESS_URL}
user-flows:
${YOUR_USER_FLOW_KEY}: ${USER_FLOW_NAME}
user-name-attribute-name: ${USER_NAME_ATTRIBUTE_NAME}
Schrijf uw Java-code.
Voor de controllercode kunt u het volgende voorbeeld raadplegen:
@Controller
public class WebController {
private void initializeModel(Model model, OAuth2AuthenticationToken token) {
if (token != null) {
final OAuth2User user = token.getPrincipal();
model.addAllAttributes(user.getAttributes());
model.addAttribute("grant_type", user.getAuthorities());
model.addAttribute("name", user.getName());
}
}
@GetMapping(value = { "/", "/home" })
public String index(Model model, OAuth2AuthenticationToken token) {
initializeModel(model, token);
return "home";
}
}
Raadpleeg het volgende voorbeeld voor uw beveiligingsconfiguratiecode:
@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 {
// @formatter:off
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.apply(configurer);
// @formatter:off
}
}
Kopieer de home.html uit het voorbeeld van aad-b2c-web-application en vervang de en PASSWORD_RESET_USER_FLOW
door de PROFILE_EDIT_USER_FLOW
namen van uw gebruikersstroom die u eerder hebt gebruikt.
Bouw en test uw app. Laten we Webapp
uitvoeren op poort 8080.
Nadat uw toepassing is gebouwd en gestart door Maven, opent u http://localhost:8080/
deze in een webbrowser. U wordt omgeleid naar de aanmeldingspagina.
Selecteer de koppeling met de aanmeldingsgebruikersstroom. U moet Azure AD B2C omleiden om het verificatieproces te starten.
Nadat u bent aangemeld, ziet u het voorbeeld home page
in de browser.
Gebruik 2: Webtoepassing die toegang heeft tot resourceservers
Dit scenario is gebaseerd op het scenario voor het openen van een webtoepassing om een toepassing toegang te geven tot andere resources. Dit scenario is de stroom voor het verlenen van OAuth 2.0-clientreferenties.
Selecteer Azure AD B2C in het portalmenu, selecteer Toepassingen en selecteer vervolgens Toevoegen.
Geef uw toepassingsnaam (zoals webApiA
), noteer de toepassings-id als uw WEB_API_A_AZURE_CLIENT_ID
en selecteer Opslaan.
Selecteer Sleutels in uw toepassing, selecteer Sleutel genereren om te genereren WEB_API_A_AZURE_CLIENT_SECRET
en selecteer vervolgens Opslaan.
Selecteer Een API beschikbaar maken in het navigatiedeelvenster en selecteer Vervolgens Instellen. Noteer de URI van de toepassings-id als uw WEB_API_A_APP_ID_URL
en selecteer Opslaan.
Selecteer Manifest in het navigatiedeelvenster en plak het volgende JSON-segment in appRoles
matrix. Noteer de URI van de toepassings-id als uwWEB_API_A_APP_ID_URL
, noteer de waarde van de app-rol als uw WEB_API_A_ROLE_VALUE
en selecteer Opslaan.
{
"allowedMemberTypes": [
"Application"
],
"description": "WebApiA.SampleScope",
"displayName": "WebApiA.SampleScope",
"id": "04989db0-3efe-4db6-b716-ae378517d2b7",
"isEnabled": true,
"value": "WebApiA.SampleScope"
}
Selecteer API-machtigingen>Toevoegen een machtiging>Mijn API's, selecteer de naam van de WebApiA-toepassing, selecteer Toepassingsmachtigingen, selecteer De machtiging WebApiA.SampleScope en selecteer vervolgens Machtiging toevoegen om het proces te voltooien.
Beheerderstoestemming verlenen voor WebApiA-machtigingen.
Voeg de volgende afhankelijkheid toe op basis van het scenario voor het openen van een webtoepassing .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
Voeg de volgende configuratie toe op basis van het scenario voor het openen van een webtoepassing .
spring:
cloud:
azure:
active-directory:
b2c:
enabled: true
base-uri: ${BASE_URI} # Such as: https://xxxxb2c.b2clogin.com
profile:
tenant-id: <tenant>
authorization-clients:
${RESOURCE_SERVER_A_NAME}:
authorization-grant-type: client_credentials
scopes: ${WEB_API_A_APP_ID_URL}/.default
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
Schrijf uw Webapp
Java-code.
Voor de controllercode kunt u het volgende voorbeeld raadplegen:
class Demo {
/**
* Access to protected data from Webapp to WebApiA through client credential flow. The access token is obtained by webclient, or
* <p>@RegisteredOAuth2AuthorizedClient("webApiA")</p>. In the end, these two approaches will be executed to
* DefaultOAuth2AuthorizedClientManager#authorize method, get the access token.
*
* @return Respond to protected data from WebApi A.
*/
@GetMapping("/webapp/webApiA")
public String callWebApiA() {
String body = webClient
.get()
.uri(LOCAL_WEB_API_A_SAMPLE_ENDPOINT)
.attributes(clientRegistrationId("webApiA"))
.retrieve()
.bodyToMono(String.class)
.block();
LOGGER.info("Call callWebApiA(), request '/webApiA/sample' returned: {}", body);
return "Request '/webApiA/sample'(WebApi A) returned a " + (body != null ? "success." : "failure.");
}
}
De beveiligingsconfiguratiecode is hetzelfde als in het scenario voor het openen van een webtoepassing . Voeg als volgt een andere bean webClient
toe:
public class SampleConfiguration {
@Bean
public WebClient webClient(OAuth2AuthorizedClientManager oAuth2AuthorizedClientManager) {
ServletOAuth2AuthorizedClientExchangeFilterFunction function =
new ServletOAuth2AuthorizedClientExchangeFilterFunction(oAuth2AuthorizedClientManager);
return WebClient.builder()
.apply(function.oauth2Configuration())
.build();
}
}
Zie de sectie Toegang tot een resourceserver om uw WebApiA
Java-code te schrijven.
Bouw en test uw app. Laat Webapp
en WebApiA
voer deze uit op respectievelijk poort 8080 en 8081 . Start de Webapp
en WebApiA
toepassingen. Ga terug naar de startpagina nadat u zich hebt aangemeld. U kunt vervolgens toegang krijgen http://localhost:8080/webapp/webApiA
tot het antwoord van de WebApiA
resource.
Gebruik 3: Toegang tot een resourceserver
Dit scenario biedt geen ondersteuning voor aanmelding. Beveilig de server door het toegangstoken te valideren en als dit geldig is, wordt de aanvraag verwerkt.
Zie Gebruik 2: Toegang tot resourceservers voor webtoepassingen om uw WebApiA
machtiging te maken.
Voeg machtigingen toe WebApiA
en ververleent beheerderstoestemming voor uw webtoepassing.
Voeg de volgende afhankelijkheden toe aan uw pom.xml-bestand .
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-boot-starter-active-directory-b2c</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Voeg de volgende configuratie toe.
spring:
cloud:
azure:
active-directory:
b2c:
enabled: true
base-uri: ${BASE_URI} # Such as: https://xxxxb2c.b2clogin.com
profile:
tenant-id: <tenant>
app-id-uri: ${APP_ID_URI} # If you're using v1.0 token, configure app-id-uri for `aud` verification
credential:
client-id: ${AZURE_CLIENT_ID} # If you're using v2.0 token, configure client-id for `aud` verification
user-flows:
sign-up-or-sign-in: ${SIGN_UP_OR_SIGN_IN_USER_FLOW_NAME}
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
Schrijf uw Java-code.
Voor de controllercode kunt u het volgende voorbeeld raadplegen:
class Demo {
/**
* webApiA resource api for web app
* @return test content
*/
@PreAuthorize("hasAuthority('APPROLE_WebApiA.SampleScope')")
@GetMapping("/webApiA/sample")
public String webApiASample() {
LOGGER.info("Call webApiASample()");
return "Request '/webApiA/sample'(WebApi A) returned successfully.";
}
}
Raadpleeg het volgende voorbeeld voor uw beveiligingsconfiguratiecode:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ResourceServerConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests((requests) -> requests.anyRequest().authenticated())
.oauth2ResourceServer()
.jwt()
.jwtAuthenticationConverter(new AadJwtBearerTokenAuthenticationConverter());
}
}
Bouw en test uw app. Laten we WebApiA
uitvoeren op poort 8081. Haal het toegangstoken voor de webApiA
resource op en open vervolgens als http://localhost:8081/webApiA/sample
de Bearer-autorisatieheader.
Gebruik 4: Resourceserver die toegang heeft tot andere resourceservers
Dit scenario is een upgrade van toegang tot een resourceserver en biedt ondersteuning voor toegang tot andere toepassingsresources, op basis van de OAuth2-clientreferentiestroom.
Als we naar de vorige stappen verwijzen, maken we een WebApiB
toepassing en maken we een toepassingsmachtiging WebApiB.SampleScope
beschikbaar.
{
"allowedMemberTypes": [
"Application"
],
"description": "WebApiB.SampleScope",
"displayName": "WebApiB.SampleScope",
"id": "04989db0-3efe-4db6-b716-ae378517d2b7",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "WebApiB.SampleScope"
}
Beheerderstoestemming verlenen voor WebApiB
machtigingen.
Voeg op basis van het openen van een resourceserver de volgende afhankelijkheid toe aan uw pom.xml-bestand .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
Voeg de volgende configuratie toe op basis van de configuratie van een resourceserverscenario .
spring:
cloud:
azure:
active-directory:
b2c:
enabled: true
credential:
client-secret: ${WEB_API_A_AZURE_CLIENT_SECRET}
authorization-clients:
${RESOURCE_SERVER_B_NAME}:
authorization-grant-type: client_credentials
scopes: ${WEB_API_B_APP_ID_URL}/.default
Schrijf uw Java-code.
Voor de WebApiA
controllercode kunt u het volgende voorbeeld raadplegen:
public class SampleController {
/**
* Access to protected data from WebApiA to WebApiB through client credential flow. The access token is obtained by webclient, or
* <p>@RegisteredOAuth2AuthorizedClient("webApiA")</p>. In the end, these two approaches will be executed to
* DefaultOAuth2AuthorizedClientManager#authorize method, get the access token.
*
* @return Respond to protected data from WebApi B.
*/
@GetMapping("/webApiA/webApiB/sample")
@PreAuthorize("hasAuthority('APPROLE_WebApiA.SampleScope')")
public String callWebApiB() {
String body = webClient
.get()
.uri(LOCAL_WEB_API_B_SAMPLE_ENDPOINT)
.attributes(clientRegistrationId("webApiB"))
.retrieve()
.bodyToMono(String.class)
.block();
LOGGER.info("Call callWebApiB(), request '/webApiB/sample' returned: {}", body);
return "Request 'webApiA/webApiB/sample'(WebApi A) returned a " + (body != null ? "success." : "failure.");
}
}
Voor de WebApiB
controllercode kunt u het volgende voorbeeld raadplegen:
public class SampleController {
/**
* webApiB resource api for other web application
* @return test content
*/
@PreAuthorize("hasAuthority('APPROLE_WebApiB.SampleScope')")
@GetMapping("/webApiB/sample")
public String webApiBSample() {
LOGGER.info("Call webApiBSample()");
return "Request '/webApiB/sample'(WebApi B) returned successfully.";
}
}
Beveiligingsconfiguratiecode is hetzelfde met het openen van een resourceserverscenario . Er wordt als volgt een andere bean webClient
toegevoegd
public class SampleConfiguration {
@Bean
public WebClient webClient(OAuth2AuthorizedClientManager oAuth2AuthorizedClientManager) {
ServletOAuth2AuthorizedClientExchangeFilterFunction function =
new ServletOAuth2AuthorizedClientExchangeFilterFunction(oAuth2AuthorizedClientManager);
return WebClient.builder()
.apply(function.oauth2Configuration())
.build();
}
}
Bouw en test uw app. Laat WebApiA
en WebApiB
voer deze uit op respectievelijk poort 8081 en 8082 . Start de WebApiA
en WebApiB
toepassingen, haal het toegangstoken voor webApiA
de resource op en open het http://localhost:8081/webApiA/webApiB/sample
als de Bearer-autorisatieheader.
Voorbeelden
Zie de spring-cloud-azure-starter-active-directory-b2c-voorbeelden voor meer informatie.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor