最近在写一套OAuth2s授权认证,当在oauth2-client调用oauth2-server,并且在点击授权以后,oauth2-client却显示【authorization_request_not_found】,并跳到了登陆页面。
经过调试发现,【authorization_request_not_found】是由OAuth2LoginAuthenticationFilter中报出的,具体位置如下:
导致这个的原因是因为从request的session中获取authorizationRequest时获取不到值,这是因为我们的oauth2-client和oauth2-server的url分别是localhost:9002和localhost:9001,下面是stackoverflow给出的这个现象的说明:
意思就是当localhost是两个端口调用会覆盖cookie,解决办法就是不用localhost,改成域名。
tips:对浏览器来说,cookie是区分域,不区分端口的,在一个ip地址下多个端口的cookie是共享的
所以【authorization_request_not_found】这个问题,解决办法就是:
step1:到host文件(C:\Windows\System32\drivers\etc)中将oauth2 server的ip通过域名映射一下:
step2:修改我们oauth2-client中的配置文件,将provider下的跟oauth2 server有关的url都是用域名:端口,不要再使用localhost:端口,如下:
server:port: 9002
spring:security:oauth2:client:registration:myclient:clientId: myclientclientSecret: 123456redirectUri: '{baseUrl}/login/oauth2/code/{registrationId}'authorizationGrantType: authorization_codeprovider:myclient:authorizationUri: http://www.oauth2server.com:9001/oauth/authorizetokenUri: http://www.oauth2server.com:9001/oauth/tokenuserInfoUri: http://www.oauth2server.com:8208/users/userinfouserNameAttribute: name
经过上面修改后,就会解决cookie覆盖问题,从而解决了【authorization_request_not_found】这个问题。