2015-09-16 4 views
5

Я пытаюсь внедрить службу REST на основе Spring Boot, которая должна использовать Azure AD в качестве сервера OAuth2 для аутентификации клиента.Использование Azure Active Directory в качестве службы проверки подлинности OAUTH2 для службы REST для Spring-boot

Я зарегистрировал два applicatons:

  1. Mobile родное приложение, которое использует в качестве клиента для моей службы
  2. 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.

Как найти требуемые значения или я ошибаюсь?

+0

Это код Java в вашем примере? –

+1

@ShaunLuttin да, это код Java – Serg

+0

Этот документ может помочь вам https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/ –

ответ

4

Наконец-то у меня есть ответ.

Azure AD использует маркеры JWT для авторизации, поэтому мне нужно реализовать работу с этим типом токенов вместо проверки маркера на сервере.

+3

не могли бы вы поделиться с ним реализацией кода для этого. –

+0

Не могли бы вы показать нам какой-то фрагмент кода? Я пытаюсь реализовать такие решения, не используя Azure AD, но я думаю, что часть JWT должна быть одинаковой – Teo

Смежные вопросы