Я использую Azure AD для аутентификации пользователей в приложении с весенней загрузкой. Мне нужно по некоторым причинам сгенерировать токен из кода начальной загрузки и вернуть его. Пока что это то, чего я достиг.
1 Azure Конфигурация рекламы. Я настроил приложение в azure Ad и зарегистрировал одного пользователя и одну группу.
в приложении у меня также есть секрет
Сейчас в В моем весеннем загрузочном приложении я добавил фильтр JWT и некоторые настройки (я не буду объяснять полную конфигурацию, потому что это займет некоторое время)
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Profile("AzureAdSecurized")
public class AzureSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private RestAuthenticationExceptionHandler restAuthenticationExceptionHandler;
@Autowired
private AADAppRoleStatelessAuthenticationFilter aadAuthenticationFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS );
http.headers().frameOptions().disable();
http.addFilterAfter(aadAuthenticationFilter, UsernamePasswordAuthenticationFilter.class );
http.addFilterBefore( new CorsFilter(), ChannelProcessingFilter.class );
http.exceptionHandling().authenticationEntryPoint( restAuthenticationExceptionHandler );
//Configuracion Endpoints
http.authorizeRequests().antMatchers( "/auth/login**" ).permitAll()
.antMatchers( "/v2/api-docs", "/configuration/**", "/swagger*/**", "/webjars/**" ).permitAll()
.antMatchers( "/actuator/**" ).permitAll().anyRequest().authenticated();
}
Я также добавил следующие свойства:
azure:
activedirectory:
tenant-id: 7XXXXX
client-id: 5XXXXX
session-stateless: true
spring:
security:
oauth2:
client:
registration:
azure:
client-id: 5XXX
client-secret: dXXXX
если я go на следующий URL-адрес Microsoft: https://login.microsoftonline.com/ / oauth2 / authorize? Client_id = & response_type = id_token & redirect_uri = http% 3A% 2F% 2Flocalhost% 3A8080% 2Flogin & nonce = 7362CAEA-9CA5–4B43–9BA3–34D7C303EBA7
Я получаю идеальный токен в перенаправлении, например: http://localhost: 8080 / login # id_token = eyJ0eXAiOiJKV1QiLCJhbGciOiJSUIWIWIWIWIWIWIWIWIWIWIWIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIWHIHIHIHIHIHIHIHIHIHIHIHIHIHIWIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHI тоже ещё *
с этим токеном я отлично передаю aadAuthenticationFilter безопасности весенней загрузки.
Дело в том, что мне нужно сгенерировать этот токен из приложения.
В моем весеннем загрузочном приложении у меня есть все go добавить: я ха Я следую учебному пособию, но я не запоминаю URL
@RestController
@RequestMapping(LoginPaths.AUTH)
@Profile("AzureAdSecurized")
public class AADLoginController {
private static final Logger LOG = LoggerFactory.getLogger( AADLoginController.class );
@RequestMapping(value = LoginPaths.LOGIN, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public String generateTokenAzureAD() throws MalformedURLException, ExecutionException, InterruptedException {
ExecutorService service = Executors.newFixedThreadPool( 1 );
AuthenticationContext context = new AuthenticationContext(
"https://login.microsoftonline.com/<My-tenant>/oauth2/v2.0/authorize", false,
service );
Future<AuthenticationResult> future = context
.acquireToken( "https://graph.microsoft.com",
"<app-id>", "<username>",
"<pass>", null );
AuthenticationResult result = future.get();
LOG.info( "Access Token - " + result.getAccessToken() );
LOG.info( "Refresh Token - " + result.getRefreshToken() );
LOG.info( "ID Token - " + result.getIdToken() );
return "Bearer " + result.getAccessToken();
}
}
, передавая имя пользователя и пароль с помощью классов библиотеки "com.microsoft.aad.adal4j" Я пытаюсь сгенерировать токен I.
Токен, который я получаю, следующий:
Как вы можете видеть, токен содержит информацию, связанную с моим пользователем и т. Д., И кажется, что она правильная, но подпись недействительна, и если вы отправляете запрос на мое приложение с таким токеном. очевидно, это дает мне и ошибку для неверной подписи.
Что я делаю не так?
Большое спасибо