我们正在尝试使用wso2身份服务器作为Oauth2身份验证服务器进行POC,我们使用ZUUL作为API网关
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
现在我们面临着两个问题
我们无法集成CONSUL和ZUUL服务,我的服务能够注册到CONSUL但是当我将@EnableZuulProxy添加到我的服务时无法连接到领事馆 抛出异常
com.ecwid.consul.transport.TransportException: java.net.ConnectException:连接被拒绝:连接
我们现在可以重新定位到wso2 IS的登录页面,当我们尝试登录时它会尝试将我重定向回到回拨URL 但我的浏览器无法获得访问令牌,并且显示重定向太多。我无法理解,是因为我的配置还是其他任何原因。 当我用谷歌搜索它时,我试图清除我的历史,但它没有工作
如果有人对此有任何想法请帮助.....
答案 0 :(得分:0)
我认为您的第二个问题可能发生的事情是OAuth2授权/资源服务器被捕获到网关的重定向循环中。
您的登录成功将您重定向到您的/resource/greeting
页面,我认为该页面是受保护的资源。然后,网关无法验证您的令牌并将您重定向回登录(已经验证了您的会话,并将其重定向回来)。
您需要确定网关无法验证令牌的原因。您可以尝试一些事项,这可以揭示潜在的问题。
首先,尝试使用CURL命令验证令牌。从auth服务器检索有效令牌后,在获取受保护资源(例如https://172.16.0.42:8900/resource/greeting
或https://172.16.0.102:9443/oauth2/userinfo
时)将承载令牌添加到请求标头。
如果您可以使用CURL验证令牌,您知道您已正确设置并且您的网关应该能够回调资源服务器以获取经过身份验证的用户的信息。如果是这种情况,那么您可以在网关应用程序中诊断问题。
此时,一种可能性可能与无效的CSRF令牌有关。我把一个例子放在一起,类似于你想做的事情,并禁用了CSRF令牌。在网关中禁用CSRF仅用于诊断目的,不建议作为长期解决方案。
您的Zuul网关配置也存在一些问题。您似乎将/resources/**
路由到https://localhost:8090
。如果我在假设中是正确的,那么你就不会保护你从网关代理的服务。建议您的后端服务指示哪些资源受到保护,以便网关可以同时提供受保护和不受保护的API资源。
请参阅此示例中的配置:
至于你的第一期,我没有一个好的答案。我怀疑在添加@EnableZuulProxy
的情况下,Consul的默认连接URL已更改。我会在Consul配置属性类中断开您的应用程序。见这里:
答案 1 :(得分:0)
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>