2016-08-06 17 views
5

Wir versuchen, ein SSO-Schema mit Azure AD und Spring-Sicherheit zu implementieren. Wir fanden ein paar Leitungen:Azure AD und Spring Security mit Oauth 2

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

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

Aber keiner von ihnen sagen, die ganze Geschichte. In der Tat können wir nicht das Parsen des Zugriffstokens übergeben, Spring hat eine andere Vorstellung davon, was das JWT-Token sein sollte.

Im Idealfall würden wir keinen SSO-Filter von Grund auf neu schreiben, sondern die Token-Dienste überschreiben, um benutzerdefinierte Filter für Starter zu implementieren.

Hat jemand das erfolgreich implementiert? Jede Hilfe wäre willkommen.

+0

Jedes Update zu diesem Thema. –

Antwort

0

In meinem Büro wir einen fremden Blog-Eintrag gefunden, der uns bis zur endgültigen Umsetzung http://statemachine.hatenablog.com/entry/2016/04/19/155920

Als Abhilfe führt, mußte man zwei Klassen hinzufügen OAuth2RestTemplate und Anfrage Verstärker zu erfassen. Es funktioniert mit Springboot 1.3.8, das Frühling 4.2.8 enthält, wir konnten es nicht mit höherer Version arbeiten lassen.

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

Die PostConstruct Anmerkung auf ein Verfahren verwendet wird, die ausgeführt werden muss, nachdem die Abhängigkeit Injektion getan, um irgendeine Initialisierung durchzuführen tion.

Ich hoffe, dies hilft Ihnen bei der Implementierung.

Verwandte Themen