2016-08-06 86 views
5

我們正在嘗試使用Azure AD和Spring安全性實現SSO方案。 我們發現了一些線索:Azure AD和Spring安全與Oauth 2

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

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

但這些都不告訴完整的故事。 實際上,我們無法通過訪問令牌解析,Spring對JWT令牌應該是什麼有不同的看法。

理想情況下,我們不想從頭開始編寫SSO篩選器,而是重寫令牌服務以實現初學者的自定義篩選。

有沒有人成功實現了這個? 任何幫助,將不勝感激。

+0

對此有任何更新。 –

回答

0

在我的辦公室,我們發現國外的博客文章這導致我們最終實施http://statemachine.hatenablog.com/entry/2016/04/19/155920

作爲一種解決辦法,你必須添加兩個類捕獲OAuth2RestTemplate並要求增強。它與包含彈簧4.2.8的彈簧引導1.3.8一起使用,我們不能使它與更高版本一起工作。

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註釋在需要後依賴注入將被執行的方法中使用完成執行任何初始化灰。

我希望這可以幫助您實施。