2016-08-06 26 views
5

Staramy się wdrożyć schemat jednokrotnego logowania przy użyciu zabezpieczeń Azure AD i Spring. Znaleźliśmy kilka potencjalnych klientów:Usługi Azure AD i Spring Security z Oauth 2

https://github.com/spring-guides/tut-spring-boot-oauth2

https://github.com/Pytry/azure-b2c-oauth2

Ale żaden z nich nie powiedzieć całą historię. W rzeczywistości nie można przejść do analizy tokenu dostępu, Spring ma inny pomysł na to, czym powinien być token JWT.

Idealnie nie chcielibyśmy pisać od zera filtra SSO, ale zastąpić Usługi tokenów, aby zaimplementować filtrowanie niestandardowe na początek.

Czy ktoś z powodzeniem wdrożył to? Każda pomoc będzie doceniona.

+0

Wszelkie aktualizacje na ten temat. –

Odpowiedz

0

W moim biurze okazało post zagranicznych blogów, które prowadzą nas do ostatecznego wdrożenia http://statemachine.hatenablog.com/entry/2016/04/19/155920

jako obejście, trzeba było dodać dwie klasy uchwycić OAuth2RestTemplate i poprosić wzmacniacze. Działa z wiosennym boot 1.3.8, który zawiera wiosnę 4.2.8, nie mogliśmy sprawić, żeby działał z wyższą wersją.

application.yml:

azure: 
    resource: https://graph.windows.net 
security: 
    oauth2: 
    client: 
     clientId: <<your client id>> 
     clientSecret: <<your client secret>> 
     accessTokenUri: https://login.microsoftonline.com/<<tenantId>>/oauth2/token 
     userAuthorizationUri: https://login.microsoftonline.com/<<tenantId>>/oauth2/authorize 
     clientAuthenticationScheme: form 
     scope: openid 
    resource: 
     userInfoUri: https://graph.windows.net/me?api-version=1.6 

AzureRequestEnhancer:

@Component 
public class AzureRequestEnhancer implements RequestEnhancer { 
    @Value("${azure.resource:null}") 
    private String aadResource; 

    @Override 
    public void enhance(AccessTokenRequest request, OAuth2ProtectedResourceDetails resource, MultiValueMap<String, String> form, HttpHeaders headers) { 
     if (!StringUtils.isEmpty(resource)) { 
      form.set("resource", aadResource); 
     } 
    } 
} 

AzureRequestEnhancerCustomizer:

@Component 
public class AzureRequestEnhancerCustomizer { 
    @Autowired 
    private OAuth2RestTemplate userInfoRestTemplate; 

    @Autowired 
    private AzureRequestEnhancer azureRequestEnhancer; 

    @PostConstruct 
    public void testWiring() { 
     AuthorizationCodeAccessTokenProvider authorizationCodeAccessTokenProvider = new AuthorizationCodeAccessTokenProvider(); 
     authorizationCodeAccessTokenProvider.setTokenRequestEnhancer(azureRequestEnhancer); 
     userInfoRestTemplate.setAccessTokenProvider(authorizationCodeAccessTokenProvider); 
    } 
} 

PostConstruct Adnotacja jest używany w sposób, który musi być wykonany po wtrysku jest zależność zrobić, aby wykonać jakąkolwiek inicjalizację tację.

Mam nadzieję, że pomoże to w implementacji.