Если вы хотите спроецировать свое приложение с ролью приложения, выполните следующие действия.
В примере используется аутентификация роли приложения для проекта веб-API
Зарегистрируйте приложение веб-API и настройте область действия API.
Определите роль приложения в вашем Azure приложении веб-API API. Добавьте в манифест приложения следующее содержимое:
"appRoles": [
{
"allowedMemberTypes": [
"User"
],
"displayName": "Admin",
"id": "2fa848d0-8054-4e11-8c73-7af5f1171001",
"isEnabled": true,
"description": "Full admin access",
"value": "Admin"
},
{
"allowedMemberTypes": [
"User"
],
"displayName": "User",
"id": "f8ed78b5-fabc-488e-968b-baa48a570001",
"isEnabled": true,
"description": "Normal user access",
"value": "User"
}
],
Назначьте эти роли пользователю
Зарегистрируйте клиентское приложение в Azure AD и настройте разрешения API
Включить неявный поток в клиентском приложении
Настроить приложение API
a. SDK
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-active-directory-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
б. application.properties
azure.activedirectory.session-stateless=true
azure.activedirectory.client-id=xxxxxx-your-client-id-xxxxxx
azure.activedirectory.appIdUri=xxxxxx-your-appIDUri-xxxxxx
c. Класс WebSecurityConfig
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AADAppRoleStatelessAuthenticationFilter aadAuthFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
http.authorizeRequests()
.antMatchers("/", "/index.html", "/public").permitAll()
.anyRequest().authenticated();
http.addFilterBefore(aadAuthFilter, UsernamePasswordAuthenticationFilter.class);
}
}
d. Контроллер
@RestController
public class HelloController {
@GetMapping("/public")
@ResponseBody
public String publicMethod() {
return "public endpoint response";
}
@GetMapping("/authorized")
@ResponseBody
@PreAuthorize("hasAnyRole('User','Admin')")
public String onlyAuthorizedUsers() {
return "authorized endpoint response";
}
@GetMapping("/admin/demo")
@PreAuthorize("hasRole('Admin')")
@ResponseBody
public String onlyForAdmins() {
return "admin endpoint";
}
}
Тест. Я использую одну страницу для тестирования
For more details, please refer to здесь и здесь