2016-08-06 32 views
5

Chúng tôi đang cố gắng triển khai lược đồ SSO sử dụng bảo mật Azure AD và Spring. Chúng tôi tìm thấy một vài dẫn:Azure AD và bảo mật mùa xuân với Oauth 2

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

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

Nhưng không ai trong số những kể lại câu chuyện đầy đủ. Trên thực tế chúng ta không thể vượt qua phân tích mã thông báo truy cập, Spring có một ý tưởng khác về mã thông báo JWT.

Lý tưởng nhất là chúng tôi không muốn viết bộ lọc SSO từ đầu nhưng ghi đè lên Dịch vụ mã thông báo để triển khai lọc tùy chỉnh cho người mới bắt đầu.

Có ai đã triển khai thành công việc này không? Mọi trợ giúp sẽ được đánh giá cao.

+0

Mọi cập nhật về điều này. –

Trả lời

0

Tại văn phòng của tôi, chúng tôi thấy một bài viết trên blog nước ngoài mà dẫn chúng ta đến việc thực hiện chính thức http://statemachine.hatenablog.com/entry/2016/04/19/155920

Là một khắc phục, bạn đã có thêm hai lớp để nắm bắt OAuth2RestTemplate và yêu cầu chất hỗ trợ. Nó hoạt động với khởi động mùa xuân 1.3.8 có chứa mùa xuân 4.2.8, chúng tôi không thể làm cho nó hoạt động với phiên bản cao hơn.

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

Chú thích PostConstruct được sử dụng trên một phương pháp mà cần phải được thực hiện sau khi tiêm phụ thuộc là được thực hiện để thực hiện bất kỳ initializa nào sự.

Tôi hy vọng điều này sẽ giúp bạn thực hiện.

Các vấn đề liên quan