Spring OAuth重定向_uri不使用https

Spring OAuth重定向_uri不使用https,oauth,spring-boot,Oauth,Spring Boot,我有一个SpringBoot1.3.0应用程序,其中包含SpringSecurityOAuth,作为一种SSO集成 问题是应用程序运行在非SSL环境中,负载平衡器(F5)后面有一个非标准端口,强制使用SSL,OAuth提供程序要求将所有重定向URL注册为https,但Spring OAuth客户端(使用@enableAuthSSO自动配置)将仅重定向到具有以下URL的OAuth提供程序 重定向\u uri=响应类型=代码和范围=[redact]&状态=IpMYTe 请注意,返回重定向uri是作为

我有一个SpringBoot1.3.0应用程序,其中包含SpringSecurityOAuth,作为一种SSO集成

问题是应用程序运行在非SSL环境中,负载平衡器(F5)后面有一个非标准端口,强制使用SSL,OAuth提供程序要求将所有重定向URL注册为https,但Spring OAuth客户端(使用@enableAuthSSO自动配置)将仅重定向到具有以下URL的OAuth提供程序

重定向\u uri=响应类型=代码和范围=[redact]&状态=IpMYTe

请注意,返回重定向uri是作为http生成的。即使F5会在返回的过程中强制它使用https,我们的OAuth提供程序也不允许使用非SSL重定向URI。我如何配置它

除了我的Spring Data JPA控制器,这是整个应用程序

AppConfig.java SecurityConfig.java 应用程序属性
您可能需要使用
spring.oauth2.client.access令牌uri

配置参数在1.3.0.M1之后更改


在手动挖掘配置类之后,我能够找到并添加以下内容,这就成功了

security.oauth2.client.pre-established-redirect-uri=https://[application_host]/login
security.oauth2.client.registered-redirect-uri=https://[application_host]/login
security.oauth2.client.use-current-uri=false

我不相信没有更好的方法来解决强制HTTPS重定向URL的问题,但是这个修复对我来说很有效

您可能需要确保应用程序理解负载平衡器的
x-forwarded

将其放入我的
应用程序中。yml
修复了我在AWS ELB后面的应用程序中的类似问题:

server:
  tomcat:
    remote-ip-header: x-forwarded-for
    protocol-header: x-forwarded-proto
编辑:这可以通过更通用的配置来简化:

server:
  use-forward-headers: true
对于Apache Tomcat
server.xml
中使用
RemoteIpValve
(上图
AccessLogValve
):


另请参见:。

我也有同样的问题。 我添加了这两个参数来强制重定向uri中的HTTPS:

preEstablishedRedirectUri: https://...
useCurrentUri: false

它是有效的:“redirect_uri”现在使用HTTPS

,因为您提到了oauth的使用,我认为这将有助于理解操作流程。此答案仅适用于使用反向代理(如NGINX)的情况

问题的原因,

您的spring引导应用程序正在服务器上运行,地址与simlar to相同。这就是所有spring boot应用程序对其主机的了解。如果在facebook(或其他oauth客户端)错误页面中检查重定向url,则可以检查此行为。看起来像

请查看重定向url是否错误

所以我们需要告诉应用程序它是在这个地址下托管的

快速修复

若您只想修复Facebook OAuth(或其他OAuth提供商),那个么向客户端添加以下行将修复此问题

facebook:
  client:
     preEstablishedRedirectUri: https://yourdomain.com/
     useCurrentUri: false
但是,这只会解决手头的问题(也不灵活)但如果您需要更具体的可移植解决方案,则需要在反向代理中解决此问题

打开应用程序的nginx配置,并将其更改如下

location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Will add the user's ip to the request, some apps need this
        proxy_set_header X-Forwarded-Proto $scheme; # will forward the protocole i.e. http, https
        proxy_set_header X-Forwarded-Port $server_port; # Will forward the port 
        proxy_set_header Host $host;                    # !Important will forward the host address
        proxy_pass http://localhost:8080/;
}
好的,现在,nginx正在将以前隐藏的信息发送到springboot应用程序。但spring应用程序并没有使用这些信息。要告诉它使用这些信息,请在application.yml中添加以下行

server.use-forward-headers = true
如果反向代理位于同一网络的不同节点中,则可能需要使用以下配置反向代理服务器的ip。(替换为您的IP)


我的答案适用于使用最新spring版本的人,因为上面提到的答案对我并不适用。我使用的是Spring Boot 2.3.5.0版本

我有一个相同的问题,我使用Azure AD进行oauth2身份验证。我的应用程序运行在反向代理之后,重定向uri采用http而不是https

看完文件后 ,我在application.properties文件的下面一行添加了它,它对我有效

spring.security.oauth2.client.registration.azure.redirect-uri=https://{baseHost}{basePort}{basePath}/login/oauth2/code/azure

“security.oauth2.client.accessTokenUri”我相信它仍然是这样工作的。0投票表决它在认证后如何处理重定向。OAuth2ClientAuthenticationProcessingFilter是由@EnableOAuth2Sso添加的,因此我没有重定向的方法。默认重定向为“/”(上下文),并且再次使用http。有人成功地做到了吗?我有一个类似的问题,但是当我想要HTTP时,URI总是以HTTPS的形式返回给我,而不是想要成为HTTPS。你知道如何做同样的事情,但方向相反吗?我已经在application.properties文件中应用了您的答案,但运气不佳。您知道是否有关于这四个属性的任何已发布文档吗?@Mark no,我通过挖掘Spring属性元数据来查看它们映射到了哪些bean,从而找到了有关这些属性的信息。不幸的是,我没有在什么地方找到它。这个设置救了我的命。。。多亏了扎克。它们是在org.springframework.security.oauth2.client.token.grant.redirect.AbstractRedirectResourceDetails中定义的。您能提供这个例子的完整示例吗?花了这么多时间,但仍然坚持使用重定向uri。重定向uri可以使用外部URL吗?您在哪里做的这些更改?您能提供更多细节吗?您必须在Spring oauth属性中进行此更改。如果使用单独的配置,则可以使用OAuth2RestTemplate,并通过使用OAuth2ProtectedResourceDetails来设置这些属性。我做了这件事,它起了作用。我认为OP应该改变这个被接受的答案。我同意Carlos,OP,这是我为最新版本的Spring Security找到的最好答案。我使用的是Spring 5.1.9.RELEASE、Spring Security 5.1.6.RELEASE和Spring Boot 2.1.8.RELEASE。您使用的是Spring Boot提供的嵌入式tomcat还是外部tomcat?如何使用外部tomcat服务器实现相同的结果?请注意,从Spring Boot 2.2开始。您应该使用
server.forward headers strategy=native
而不是
server.use-fo
facebook:
  client:
     preEstablishedRedirectUri: https://yourdomain.com/
     useCurrentUri: false
location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Will add the user's ip to the request, some apps need this
        proxy_set_header X-Forwarded-Proto $scheme; # will forward the protocole i.e. http, https
        proxy_set_header X-Forwarded-Port $server_port; # Will forward the port 
        proxy_set_header Host $host;                    # !Important will forward the host address
        proxy_pass http://localhost:8080/;
}
server.use-forward-headers = true
server.tomcat.internal-proxies=192\.65\.210\.55
spring.security.oauth2.client.registration.azure.redirect-uri=https://{baseHost}{basePort}{basePath}/login/oauth2/code/azure