wuyouzhuguli / SpringAll

循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2,博客Spring系列源码:https://mrbird.cc
MIT License
28.21k stars 8.11k forks source link

@EnableAuthorizationServer 里面重写的几个配置方法的作用? #27

Closed fengjunzixian closed 4 years ago

fengjunzixian commented 4 years ago

1 public void configure(ClientDetailsServiceConfigurer clients) throws Exception 配置oauth 客户端 clientid clientsecret 认证方式授权范围, 有个方法: .redirectUris("http://127.0.0.1:9090/app1/login") ,重定向地址对应获取到授权码后 重定向到客户端的url

2 //切入点配置 配置秘钥存储方式 设置密码认证 @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) 这个服务器端切入点 的作用是 设置存储令牌的方法(JWT or redis ....)

3 @Override public void configure(AuthorizationServerSecurityConfigurer security) { security.tokenKeyAccess("isAuthenticated()"); // 获取密钥需要身份认证 } 第三个方法, 获取秘钥需要身份认证,这个秘钥指的是令牌么还是......怎么理解?

fengjunzixian commented 4 years ago

关于上面第三个问题 @Bean public JwtAccessTokenConverter jwtAccessTokenConverter() { JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter(); accessTokenConverter.setSigningKey("test_key"); return accessTokenConverter; }

是否在是JWT设置秘钥 加密, 如上方方法
第三个方法表示获取秘钥需要认证, 也就是客户端登陆了 可以获得秘钥和令牌 , 但是令牌是加密过的(用test_key 加盐之类的算法), 保证即使token令牌被泄露也无法解析

wuyouzhuguli commented 4 years ago

不是,是为了防止JWT在传输过程中被篡改。

fengjunzixian commented 4 years ago

一个客户端对应一个认证端发放的令牌 , 格式 : header + payload +signature , 第三个参数签名是 认证服务器根据header 中的加密算法 和客户端配置的 client-secret 加密的得到, 客户端校验token时会根据相同的算法再算一次防止立牌被篡改 , 也就是防止被篡改 盐: secret 在客户端配置的 @Bean public JwtAccessTokenConverter jwtAccessTokenConverter() { JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter(); // accessTokenConverter.setSigningKey("test_key"); return accessTokenConverter; } 在服务器端设置的这个 test_key注解掉了也不影响登录, 那这个方法的作用是什么呢?

fengjunzixian commented 4 years ago

resource: jwt: key-uri: http://127.0.0.1:8080/server/oauth/token_key 而且在客户端配置 如上的属性, 查了下很多都说是 "token加密秘钥" ,这个秘钥作用时机是什么?这个配置还一定得配置,客户端启动的时候会根据这个url请求服务器加载配置

wuyouzhuguli commented 4 years ago

就是签名密钥,使用这个密钥加签后,你可以做验签处理,所以目的就是防止令牌传输途中被修改。

fengjunzixian commented 4 years ago

client-secret: app-b-1234 这个的作用呢

wuyouzhuguli commented 4 years ago

client_id和client_secret组成了一个合法的客户端,只有合法的客户端才能从认证服务器获取令牌,这也是OAuth2协议规定。