我想使用新的Spring Security Authorization Server
为我的Web服务实现OAuth2
。
在https://www.baeldung.com/spring-security-oauth-auth-server处给出了一个例子,分离
- 授权服务器
- 资源服务器
- 委托方
该代码可在https://github.com/Baeldung/spring-security-oauth/tree/master/oauth-authorization-server中找到
这三个Maven项目在给定版本中正常工作,当Web浏览器中的客户端访问http://localhost:8080/articles时,输出正确
["Article 1","Article 2","Article 3"]
我尝试将Authorization Server
项目更新为0.1.1
,但是尽管它可以编译并启动,但当客户端访问http://localhost:8080/articles时,我得到
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sat Aug 07 15:57:26 CEST 2021
There was an unexpected error (type=None, status=999).
我想这是因为我必须更新所有三个项目中的其他版本,到Spring Boot 2.5.3
和OpenJDK 16
,但同样的错误。
我更新为0.1.2
并将日志级别更改为DEBUG
,启动授权服务器项目时会出现以下内容:
...
2021-08-09 17:54:45.876 DEBUG 16256 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat'
2021-08-09 17:54:46.015 DEBUG 16256 --- [ main] o.a.catalina.core.AprLifecycleListener : The Apache Tomcat Native library could not be found using names [tcnative-1, libtcnative-1] on the java.library.path [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]. The errors reported were [Can't load library: /home/myself/PROJECTs/SPRING/spring-authorization-server/bin/libtcnative-1.so, Can't load library: /home/myself/PROJECTs/SPRING/spring-authorization-server/bin/liblibtcnative-1.so, no tcnative-1 in java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib, no libtcnative-1 in java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
org.apache.tomcat.jni.LibraryNotFoundError: Can't load library: /home/myself/PROJECTs/SPRING/spring-authorization-server/bin/libtcnative-1.so, Can't load library: /home/myself/PROJECTs/SPRING/spring-authorization-server/bin/liblibtcnative-1.so, no tcnative-1 in java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib, no libtcnative-1 in java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
at org.apache.tomcat.jni.Library.<init>(Library.java:101) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.tomcat.jni.Library.initialize(Library.java:211) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.catalina.core.AprLifecycleListener.init(AprLifecycleListener.java:192) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.catalina.core.AprLifecycleListener.isAprAvailable(AprLifecycleListener.java:101) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getDefaultLifecycleListeners(TomcatServletWebServerFactory.java:173) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.<init>(TomcatServletWebServerFactory.java:120) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat.tomcatServletWebServerFactory(ServletWebServerFactoryConfiguration.java:76) ~[spring-boot-autoconfigure-2.5.3.jar:2.5.3]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:217) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:160) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:577) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.3.jar:2.5.3]
at com.baeldung.OAuth2AuthorizationServerApplication.main(OAuth2AuthorizationServerApplication.java:10) ~[classes/:na]
...
0.1.1
看起来也是这样
我的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung</groupId>
<artifactId>spring-authorization-server</artifactId>
<version>0.1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.experimental</groupId>
<artifactId>spring-security-oauth2-authorization-server</artifactId>
<version>0.1.2</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>16</java.version>
</properties>
</project>
仅更改pom.xml、0.1.0或0.1.1或0.1.2中的授权服务器版本会产生相同的异常。
Baeldung的示例项目只在0.1.0中运行(从localhost:8080/articles中交付文章),但在0.1.1和0.1.2中,我得到了所描述的Whitelable错误页。
3条答案
按热度按时间ujv3wf0j1#
首先,我建议您检查一下samples in the spring-authorization-server project本身(例如,请参见这一行),这将确保您跟上项目中发生的快速变化,因为Web上的那些教程往往很快就会过时。
第二,我相信调试中的第二个错误与此问题无关,所以这似乎是一个本地设置问题,但我不是100%肯定。
第三,由于#243,第一个错误发生在SAS的较新版本上。更改包括合并OAuth 2.1第9.7.1节中的建议,其中规定:
虽然使用localhost(即“http://localhost:{port}/{path}”)的重定向URI的功能类似于第10.3.3节中描述的环回IP重定向,但不建议使用“localhost”。使用环回IP文字而不是“localhost”指定重定向URI可避免无意中侦听环回接口以外的网络接口。它还不易受到客户端防火墙和用户设备上配置错误的主机名解析的影响。
当重定向URI的主机为
localhost
时,此错误仅在重定向回客户端应用程序时出现。如果您在授权服务器中启用跟踪日志记录(例如logging.level.org.springframework.security=trace
),您将看到一个成功的身份验证,然后重定向到一个错误页,类似于:这说明在流的早期发生了一些事情,我们只是在此时遇到了症状。如果在登录之前查看日志的更高部分,您将看到类似以下的内容:
因此,错误实际上发生在
OAuth2AuthorizationEndpointFilter
中,验证后,错误重定向保存为目标URL,然后我们被重定向到/login
,验证后,重定向回/error
,这将生成一个白标签错误页面。短期的解决方法是确保您的客户端应用程序使用
127.0.0.1
,而不是localhost
,包括更改授权服务器中的重定向URI(参见示例)。但是,如果您忘记并在http://localhost:8080
启动浏览器,您仍然会收到此错误。您现在可以在客户端应用程序中使用如下过滤器来解决此问题:我鼓励您通过open an issue请求改进此错误的处理方式。如果您感兴趣,我们很乐意与您讨论此问题,并让您参与到项目中来帮助解决此问题。
r6hnlfcb2#
我也遇到了同样的问题,经过四五天的努力,我找到了解决办法。
我刚刚在etc/hosts文件中添加了以下条目
127.0.0.1 认证服务器
解决了这个问题
v440hwme3#
我有同样的错误比你的第二个,关于Spring不能加载2库的apache tomcat。我知道你要求一个解决方案,但我会告诉你我希望有人告诉我。
**这只是来自SpringBoot的DEBUG级别日志。它不是ERROR或WARNING日志。这没关系。**世界上所有的spingboot应用程序可能都有相同的日志。
你已经激活了整个应用程序的调试日志,甚至在库中。我不建议默认情况下这样做,因为它会记录太多。
仅在应用程序的主包上启用DEBUG模式。然后,当需要调试特定库包时,仅在其上激活DEBUG模式。
例如,如果您需要查看mongodb-driver执行的请求,那么您的application.yml应该如下所示: