为什么重定向 URI 配置为 127.0.0.1 而不是 localhost?

问题描述 投票:0回答:2

我正在关注这个演示示例并且想知道为什么身份验证服务器配置会读取

          redirect-uris:
            - "http://127.0.0.1:1234/login/oauth2/code/my-webapp-client-oidc"
            - "http://127.0.0.1:1234/authorized"
          post-logout-redirect-uris:
            - "http://127.0.0.1:1234/logged-out"

而不是

          redirect-uris:
            - "http://localhost:1234/login/oauth2/code/my-webapp-client-oidc"
            - "http://localhost:1234/authorized"
          post-logout-redirect-uris:
            - "http://localhost:1234/logged-out"

我认为这没有什么区别,但确实如此。将 URI 更改为 localhost 时,身份验证服务器在尝试登录时给出异常:

org.springframework.security.access.AccessDeniedException: Access Denied
    at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:98) ~[spring-security-web-6.2.1.jar:6.2.1]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.2.1.jar:6.2.1]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.2.1.jar:6.2.1]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.2.1.jar:6.2.1]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.2.1.jar:6.2.1]
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.2.1.jar:6.2.1]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.2.1.jar:6.2.1]
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.2.1.jar:6.2.1]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.2.1.jar:6.2.1]
    at...

您能给我解释一下吗?谢谢。

spring-boot spring-security spring-oauth2 spring-authorization-server
2个回答
0
投票

无论您使用

localhost
还是
127.0.0.1
,或者购买域名并将其附加到您的计算机并使用它,都没有关系。重要的是你保持一致,无论你用来注册的 URL 都是你用来提供回调(重定向)的 URL。

原因在于spec,根据 OAauth2 seicifcation,授权服务器将使用简单的字符串比较来检查重定向 URI 匹配 - 参见此处。因此,即使这些 url dns 解析最终会成为同一服务器,即使一个字母的差异也很重要。


0
投票

spring-authorization-server 文档有一个具体的示例,演示如何配置自定义身份验证验证器,允许在redirect_uri参数中使用 localhost here

© www.soinside.com 2019 - 2024. All rights reserved.