2016-05-06 44 views
1

我們正在嘗試做一個POC,我們將使用wso2身份服務器作爲Oauth2身份驗證服務器,並且我們使用ZUUL作爲API網關Spring Boot Oauth2 SSO與wso2身份服務器使用zuul作爲api-gateway與領事服務發現

zuul代理服務

@EnableZuulProxy 
@EnableOAuth2Sso 
@SpringBootApplication 
public class ApiGatewayApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(ApiGatewayApplication.class, args); 
    } 
} 

application.properties

security.basic.enabled=false 
security.oauth2.client.accessTokenUri=https://172.16.0.102:9443/oauth2/token 
security.oauth2.client.clientId=erX25bMjkEwIS7ZDxP5vYRM1r5Ya 
security.oauth2.client.clientSecret=A2kDWZ_WVProSgf2TuNE15jy8Oga 
security.oauth2.client.userAuthorizationUri=https://172.16.0.102:9443/oauth2/authorize 
security.oauth2.client.preEstablishedRedirectUri=https://172.16.0.42:8900/resource/greeting 
security.oauth2.client.useCurrentUri=false 
security.oauth2.resource.userInfoUri=https://172.16.0.102:9443/oauth2/userinfo 
security.oauth2.resource.preferTokenInfo=false 
server.port=8900 
spring.application.name=ZUUL 
zuul.ignoreLocalService=false 
server.ssl.key-store=wso2carbon.jks 
server.ssl.key-store-password=wso2carbon 
server.ssl.keyStoreType=jks 
security.oauth2.client.grantType=authorization_code 

zuul.routes.resource.path=/resource/** 
zuul.routes.resource.url=https://localhost:8090 

現在面臨兩個問題

  1. 我們是不是能夠整合領事,ZUUL服務,我的服務能夠與領事註冊,但是當我添加@EnableZuulProxy我的服務無法連接到領事它 拋出一個異常

    com.ecwid.consul.transport.TransportException: java.net.ConnectException:連接被拒絕:連接

  2. 我們現在可以重定向到wso2 IS的登錄頁面,當我們嘗試登錄時,它會嘗試將我重定向回到回撥URL ,但我的瀏覽器無法獲得訪問令牌,並且它說太多重定向。我無法理解,是因爲我的配置還是其他原因。 我試圖清除我的歷史表明,當我GOOGLE了它,但它不工作

如果任何人有任何想法,這個請大家幫忙.....

回答

0

我認爲可能會發生您的第二個問題是OAuth2授權/資源服務器在網關的重定向循環中被捕獲。

您的登錄成功將您重定向到您的/resource/greeting頁面,我認爲這是一個受保護的資源。然後,網關無法驗證您的令牌並將您重定向回登錄(其中會話已經過驗證,並將您重定向回)。

您需要確定網關無法驗證令牌的原因。有幾件事你可以嘗試,這可以揭示潛在的問題。

首先要嘗試使用CURL命令驗證令牌。從auth服務器檢索到有效令牌後,在獲取受保護資源(如https://172.16.0.42:8900/resource/greetinghttps://172.16.0.102:9443/oauth2/userinfo)時,將不記名令牌添加到請求頭。

如果您可以使用CURL驗證令牌,那麼您知道事情已經正確設置,並且網關應該能夠回撥資源服務器以獲取經過驗證的用戶信息。如果是這種情況,那麼您可以在網關應用程序中診斷問題。

此時,一種可能性可能與無效的CSRF令牌有關。我把一個例子放在一起,就像你想要做的一樣,並且禁用了CSRF令牌。禁用網關中的CSRF僅用於診斷目的,不推薦作爲長期解決方案。

https://github.com/kbastani/spring-cloud-event-sourcing-example/blob/master/edge-service/src/main/java/demo/EdgeApplication.java#L28

也有一些問題,你的Zuul網關配置。您似乎將/resources/**路由到https://localhost:8090。如果我假設正確,正因爲如此,你不能從網關獲得代理服務。建議您的後端服務指定其中哪些資源受到保護,以便網關可以同時提供受保護和未受保護的API資源。

見的配置在這個例子:

https://github.com/kbastani/spring-cloud-event-sourcing-example/blob/master/edge-service/src/main/resources/application.yml#L38

關於你的第一個問題,我沒有一個很好的答案。我懷疑在添加@EnableZuulProxy的情況下,Consul的默認連接URL會發生更改。我會在Consul配置屬性類中斷開你的應用程序。在這裏看到:

https://github.com/spring-cloud/spring-cloud-consul/blob/master/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryProperties.java

+1

感謝您的回覆,它確實有助於理解問題,但問題的實際原因是自簽名證書,我會更新答案 –

0

不管肯尼曾建議是有效的,但在我們的例子中,我們所面臨的,因爲我們的時候,我們安裝在信任存儲證書,它的工作是使用自簽名證書重定向循環問題!還需要有在性能做一些修改爲WSO2,我們就安裝證書後,就知道

security: 
    oauth2: 
    client: 
     clientId: fdrfsdgersdgdrf 
     clientSecret: dsgardgdfgadfgad 
     accessTokenUri: https://localhost:9443/oauth2/token 
     userAuthorizationUri: https://localhost:9443/oauth2/authorize 
     clientAuthenticationScheme: form 
     scope: openid 
     use-current-uri: true 
    resource: 
     userInfoUri: https://localhost:9443/oauth2/userinfo?schema=openid 
spring: 
    resources: 
    chain: 
     enabled: true 

server: 
    ssl: 
    key-store: localhost.pfx 
    key-password: localhost 
    key-store-type: PKCS12 

    trust-store: localhost.pfx 
    trust-store-password: localhost 
    trust-store-type: PKCS12 
    port: 8080 

我在POM解決了我的第一個問題,通過改變依賴

以前

<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-consul-all</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-consul-discovery</artifactId> 
</dependency>