gpt4 book ai didi

Spring security oauth2 错误地使用内部 URL 作为当前 URI 进行重定向

转载 作者:行者123 更新时间:2023-12-03 17:46:55 25 4
gpt4 key购买 nike

在通过 OAuth2 保护的远程资源的 Spring 定义中,客户端应用程序想要访问它,我将 use-current-uri 设置为 true,换句话说,当前 URI 应该用作重定向(如果可用)。看起来像:

<oauth:resource id="myResourceId" type="authorization_code"
client-id="${clientId}" client-secret="${clientSecret}"
access-token-uri="${accessTokenUri}"
user-authorization-uri="${userAuthorizationUri}"
use-current-uri="true"
scope="myScope"
pre-established-redirect-uri="${preEstablishedRedirectUri}"/>

现在的问题是,Spring Security OAuth2 客户端将获取当前的内部 Tomcat URL,而不是公共(public) Web 应用程序的 URL。该场景是 Tomcat 服务器位于 Apache 服务器后面,这会产生两组 URL:
  • 公共(public) Web 应用程序的 URL 是 http://example.com/users/login
  • 内部 Tomcat URL 是 http://localhost:8080/myapplication/users/login

  • 因为重定向 URL 是供授权服务器(例如 Twitter、ORCID)用来发回授权代码的,所以应该使用公共(public) Web 应用程序的 URL,而不是内部 URL。

    顺便说一句,我正在使用以下版本的 spring-security-oauth2:
  • spring-security-oauth2-1.0.5.RELEASE
  • spring-core-3.1.2.RELEASE
  • spring-security-core-3.1.3.RELEASE

  • 想知道是否有办法告诉 Spring 使用公共(public) URL。谢谢。

    最佳答案

    在您的 tomcat conf/server.xml 的连接器元素中,尝试像这样设置前面 tomcat 的公共(public) URL:

        <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    proxyName="example.com"
    proxyPort="443" (or whatever port you are using, same goes for scheme )
    scheme="https" />

    这样,tomcat 的内部 getServerName 和 getServerPort 方法将开始提供正确的值,希望这些值应该创建正确的 URL。

    您可能还想配置您的网络服务器以路由落在
    http://example.com/users/loginhttp://localhost:8080/myapplication/users/login如果还没有完成。

    关于Spring security oauth2 错误地使用内部 URL 作为当前 URI 进行重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28883611/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com