Oauth2授权码模式登录BUG

Blade 未结 1 881
lljstar
lljstar 2021-11-15 15:16

一、该问题的重现步骤是什么?

1. 直接按文档提供的授权码模式访问

2. 弹出用户名密码输入

3.提交


二、你期待的结果是什么?实际看到的又是什么?

跳转授权页面,但实际未跳转有BUG


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

企业版本2.8.2

四、请提供详细的错误堆栈信息,这很重要。

BladeUserDetailsServiceImpl->loadUserByUsername
 这里取不到弹出表单中提交的密码
String password = request.getParameter(TokenUtil.PASSWORD_KEY);
// 用户存在但密码错误,超过次数则锁定账号
if (!grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(DigestUtil.hex(password))) {
这里缺少grantType参数及密码取不到都会出错

说明:如果补充了grant_type=refresh_token可以跳过密码为空的认证。 但  DaoAuthenticationProvider 中又可取到请求form表单中的password字段。 所以这块是怎么设计的?

五、若有更多详细信息,请在下面提供。

问题1:授权码和密码登录模式 大部分参数不同为何会共用一个,是否可以根据两个模式的某一个不同参数识别出模式后,对参数采用不同的校验?

BladeUserDetailsServiceImpl

实现类?

问题2:code=233333这个参数没有发挥具体的作用,代码没有看到对这两个参数的处理。

问题3:

BladeClientDetailsServiceImpl 在授权码模式下表单用户密码验证后,这个loadClientByClientId方法被调用息多次,至少有3次查询数据库,需要优化成缓存。

1条回答
  •  bfwking
    bfwking (楼主)
    2022-03-12 17:42

    遇到同样的问题,这块是个bug

    0 讨论(0)
提交回复