Я пытаюсь внедрить службу REST на основе Spring Boot, которая должна использовать Azure AD в качестве сервера OAuth2 для аутентификации клиента.Использование Azure Active Directory в качестве службы проверки подлинности OAUTH2 для службы REST для Spring-boot
Я зарегистрировал два applicatons:
- Mobile родное приложение, которое использует в качестве клиента для моей службы
- Rest-службу в качестве внутреннего интерфейса.
Все запросы к серверному приложению должны быть аутентифицированы через Azure AD с использованием потока OAuth2.
В качестве реализации мобильного приложения Я использую локон:
Для получения маркера однонаправленного я использую https://login.microsoftonline.com/TENANT_ID/oauth2/token
curl -s -X POST https://login.microsoftonline.com/<TENANT_ID>/oauth2/token -d grant_type=password -d username=$USER_NAME -d password=$PASSWORD -d resource=$RESOURCE_ID -d client_id=$CLIENT_ID
где $ USER_NAME и $ PASSWORD являются credetials на лазурном пользователя AD, $ RESOURCE_ID - это SID моей службы REST, а $ CLIENT_ID - это SID моего мобильного клиента для REST-сервиса.
Azure успешно возвращает JSON с данными токена.
My oauth2 Config для Backend приложения:
@Configuration
@EnableResourceServer
public class OAuth2Config extends ResourceServerConfigurerAdapter {
@Bean
ResourceServerTokenServices resourceTokenServices() {
RemoteTokenServices tokenServices = new RemoteTokenServices();
tokenServices.setClientId(resourceId);
tokenServices.setClientSecret(/*I do not have it*/resourcePassword);
tokenServices.setCheckTokenEndpointUrl(/*I do not have it*/checkToken);
return tokenServices;
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.tokenServices(resourceTokenServices());
resources.resourceId("rest_api");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/**").authenticated();
}
}
Мой контроллер REST:
@RestController
@RequestMapping("/data")
public class CustomerRestController {
@RequestMapping(method = RequestMethod.GET)
public SomeData getMyData(Principal principal){
System.out.println("RESOURCE WAS REQUESTED BY " + principal.getName());
return new SomeData(principal.getName());
}
}
Но я не нашел в списке конечных точек любой URL, который может быть использован моей службы REST для проверка токена-носителя и получение пользовательских данных от Azure AD. Кроме того, как я понимаю, для моей службы REST должны быть какие-то учетные данные для использования Azure AD.
Как найти требуемые значения или я ошибаюсь?
Это код Java в вашем примере? –
@ShaunLuttin да, это код Java – Serg
Этот документ может помочь вам https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/ –