加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

nginx – 使用Spring Cloud OAuth2的SSL /代理问题

发布时间:2020-12-13 21:02:04 所属栏目:Nginx 来源:网络整理
导读:我改编了以下OAauth2 Spring Cloud示例: Authserver/SSO 我做的唯一更改是在Authserver端使用JPA来检查数据库中的凭据.一切都运行良好,除了在nginx代理后面部署它.如上面的示例应用程序中所使用的,使用Spring Boot和嵌入式Tomcat.我还正确配置了代理头: se

我改编了以下OAauth2 Spring Cloud示例:

Authserver/SSO

我做的唯一更改是在Authserver端使用JPA来检查数据库中的凭据.一切都运行良好,除了在nginx代理后面部署它.如上面的示例应用程序中所使用的,使用Spring Boot和嵌入式Tomcat.我还正确配置了代理头:

server.tomcat.protocol-header=X-Forwarded-Proto
server.tomcat.remote-ip-header=X-Real-IP

代理HTTP正在运行:

accessTokenUri: http://uaa.sample.com/oauth/token
userAuthorizationUri: http://uaa.sample.com/oauth/authorize

到目前为止一切顺利,但我需要使用SSL(显然):

accessTokenUri: https://uaa.sample.com/oauth/token
userAuthorizationUri: https://uaa.sample.com/oauth/authorize

如果我切换到SSL,我会在auth服务器从授权重定向后从我的客户端应用程序获得401.我捕获了HTTP流量,一切似乎都有效:

> GET请求客户端应用程序
>客户端应用程序重定向到/ login
> / login重定向到https://uaa.sample.com/oauth/authorize?client_id=reprisk&redirect_uri=http://test.sample.com/login&response_type=code&state=9prwi2
> Auth服务器重定向到https://uaa.sample.com/login
>登录后,再次调用授权,服务器最终重定向到http://test.sample.com/login?code=212eRK&state=9prwi2

HTTP和HTTPS的HTTP流量完全相同,只是对于HTTP,为最后一个请求设置了适当的引用(AFAIK,在OAuth身份验证期间未检查引用,对吧?):

HTTP:

GET /login?code=212eRK&state=9prwi2 HTTP/1.1
Host: test.sample.com
...
Referer: http://uaa.sample.com/login
Cookie: JSESSIONID=401EB8D1D1F4297160D518EC253A0CB5; XSRF-TOKEN=95a00a0d-3362-4e9b-b7eb-45addf2d10b4
...

---
HTTP/1.1 302 Found

HTTPS:

GET /login?code=212eRK&state=9prwi2 HTTP/1.1
Host: test.sample.com
...
Cookie: JSESSIONID=401EB8D1D1F4297160D518EC253A0CB5; XSRF-TOKEN=95a00a0d-3362-4e9b-b7eb-45addf2d10b4
...

---
HTTP/1.1 401 Unauthorized

客户端应用程序的相应日志消息:

Authentication request failed: org.springframework.security.authentication.BadCredentialsException: Could not obtain access token.

使用代理和SSL的任何想法都不起作用?我很乐意分享更多代码和/或日志输出!

谢谢!!!

在SSO应用程序尝试交换令牌的身份验证代码时,它似乎失败了.
之前的所有步骤都是浏览器重定向,这是尝试调用auth服务器的SSO服务器上的代码.
你在auth服务器上使用什么SSL证书?它们是否由Java信任库中具有CA的受信任方签署?
如果没有,这可能是它失败的原因,因为BadCredentialsException是底层HTTP请求失败的最终结果.

另一种选择是没有直接从SSO服务器到Auth服务器地址的路由.

我相信它最终会处理请求的Apache Commons HttpClient代码,所以你应该尝试增加这些类的调试(org.apache.http)并查看它报告的内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读