本篇文章为大家展示了SpringCloud consul 微服务SpringSecurityOAuth2 authorization_code模式遇到的坑有什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
目前项目在使用consul做服务注册与发现,做SpringSecurityOAuth3 权限认证的authorization_code模式的时候发现一个异常坑爹的问题
这是开始的服务注册代码块 bootstrap.yml:
spring: cloud: consul: port: 8500 host: localhost discovery: serviceName: auth locator: lower-case-service-id: true enabled: true register: true
这是注册完后的健康检查
他会把你的主机地址给注册上来。 平时使用可能没问题,但是 当做OAuth3的 authorization_code 模式认证的时候,会出现跨域异常情况如下:
这是请求路径:
http://localhost:8001/auth/oauth/authorize?response_type=code&client_id=client_name&redirect_uri=http://localhost:8001/auth/callback&scope=auth
访问后跳转到默认的登录界面:
没有权限 返回401。 问题就出在了,跳转回主机名导致了跨域问题。
解决该问题的措施就是修改开始的bootstrap.yml的文件:
spring: cloud: consul: port: 8500 host: localhost discovery: serviceName: auth locator: lower-case-service-id: true enabled: true register: true prefer-ip-address: true #这个必须配 tags: version=1.0 instance-id: ${spring.application.name}:${spring.cloud.client.ip-address} healthCheckInterval: 15s health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health
consul注册增加强制限制 prefer-ip-address:true 强制获取ip的方式注册到consul。
2019.07.09
由于没有配置
spring.cloud.consul.discovery.prefer-ip-address=true
微服务将会注册所在主机/容器的主机名 注册到consul,然而,我们会发现有时可能造成注册IP到consul 主机名是通过调用Java API获取的,有时候Java API无法获得主机名,于是会将IP地址发送给 consul + 只要你配置了环境变量HOST_NAME ,就可以将你所配置的环境变量注册
spring.cloud.gateway.discovery.instance.hostname=${HOST_NAME}
获取主机名的相关代码:
https://github.com/spring-cloud/spring-cloud-commons/blob/master/spring-cloud-commons/src/main/java/org/springframework/cloud/commons/util/InetUtils.java
从ip跳转回主机名导致跨域权限异常。
上述内容就是SpringCloud consul 微服务SpringSecurityOAuth2 authorization_code模式遇到的坑有什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。