2015-09-16 15 views
5

Próbuję zaimplementować usługę REST opartą na rozruchu sprężystym, która powinna używać usługi Azure AD jako serwera OAuth2 do uwierzytelniania klienta.Używanie usługi Azure Active Directory jako usługi uwierzytelniania OAUTH2 dla usługi REST usługi rozruchu sprężynowego

Zarejestrowałem dwa applicatons:

  1. Telefony natywną aplikację, która używa jako klient dla mojej służby
  2. Rest-usługi jako backend.

Wszystkie żądania do aplikacji zaplecza należy uwierzytelnić za pomocą usługi Azure AD przy użyciu przepływu OAuth2.

Jako wdrożenie aplikacji mobilnej Używam Zwijanie:

Dla uzyskania tokenu okaziciela używam 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 

gdzie $ USER_NAME i $ hasło są credetials z lazurowym użytkownika AD, $ RESOURCE_ID to identyfikator SID mojej usługi REST, a identyfikator $ CLIENT_ID to identyfikator SID mojego klienta mobilnego dla usługi REST.

Azure pomyślnie zwraca JSON z danymi tokena.

My OAuth2 Config dla Backend aplikacji:

@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(); 
    } 
} 

Mój kontroler 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()); 
    } 
} 

Ale nie mogę znaleźć na liście końcowego dowolny adres URL, który może być używany przez mojego usługi REST dla sprawdzanie tokena okaziciela i uzyskiwanie danych użytkownika z Azure AD. Ponadto, jak rozumiem, powinien istnieć jakiś rodzaj poświadczeń dla mojej usługi REST za korzystanie z usługi Azure AD

Jak mogę znaleźć wymagane wartości lub jadę w niewłaściwy sposób?

+0

Czy ten kod Java jest w twoim przykładzie? –

+1

@ShaunLuttin tak, jest to kod Java – Serg

+0

Ten dokument może ci pomóc https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/ –

Odpowiedz

4

Nareszcie mam odpowiedź.

Azure AD używa tokenów JWT do autoryzacji, więc muszę zaimplementować pracę z tego typu tokenami zamiast sprawdzać token na serwerze.

+3

czy możesz podzielić się implementacją kodu dla tego. –

+0

Czy możesz pokazać nam jakiś fragment kodu? Próbuję wdrożyć takie rozwiązania, nie używając Azure AD, ale myślę, że część JWT musi być taka sama – Teo

Powiązane problemy