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:
- Telefony natywną aplikację, która używa jako klient dla mojej służby
- 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?
Czy ten kod Java jest w twoim przykładzie? –
@ShaunLuttin tak, jest to kod Java – Serg
Ten dokument może ci pomóc https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/ –