[alibaba/nacos]docker2.1.1 设置NACOS_AUTH_ENABLE=true 后,修改密码返回session expired! 无法修改成功

2023-12-18 105 views
7

docker2.1.1

设置NACOS_AUTH_ENABLE=true 后,无法修改密码 修改密码返回session expired! ,跳回到登陆页 接口返回: { "timestamp": "2022-09-07T15:28:01.867+08:00", "status": 401, "error": "Unauthorized", "message": "session expired!", "path": "/nacos/v1/auth/users" }

不设置NACOS_AUTH_ENABLE=true ,可以成功修改密码

同样,管理员也无法修改其他用户的密码,同样的报错

回答

8

用ng代理之类的?

9

docker pull nacos/nacos-server:v2.1.1 直接用的这个 启动参数设置NACOS_AUTH_ENABLE=true, 启动后访问默认的控制台 登陆后修改密码操作 没有用其他ng代理

4

@zhangxun-lime 我这边没复现, docker run --name nacos-standalone -e MODE=standalone -e NACOS_AUTH_ENABLE=true -p 8848:8848 -p 9848:9848 nacos/nacos-server:v2.1.1

6

清理一下浏览器缓存再试试呢

6

非常抱歉,重新进行了测试,docker run 启动确实是正常的。

实际是在k8s部署的情况下发生的, 使用下述方式部署 https://github.com/nacos-group/nacos-k8s/blob/master/deploy/nacos/nacos-quick-start.yaml 中增加了

  • name: NACOS_AUTH_ENABLE value: "true" 的配置, 然后修改密码返回session expired! ,跳回到登陆页 同样也是三个节点,其他功能目前使用正常。

如果不配置NACOS_AUTH_ENABLE,则可以正常修改用户密码

7

@zhangxun-lime @KomachiSion

我在K8S环境下部署,也是碰到了同样的情况

请问如何解决?

8

request中未获取到session

3

这个问题怎么解决得????

9
    private boolean hasPermission(String username, HttpServletRequest request) throws HttpSessionRequiredException {
        if (!authConfigs.isAuthEnabled()) {
            return true;
        }
        NacosUser user = (NacosUser) request.getSession().getAttribute(AuthConstants.NACOS_USER_KEY);
        // k8s中集群中获取不到
        if (user == null) {
            throw new HttpSessionRequiredException("session expired!");
        }
        // admin
        if (user.isGlobalAdmin()) {
            return true;
        }
        // same user
        return user.getUserName().equals(username);
    }
    private NacosUser getNacosUser(String token) {
        Authentication authentication = tokenManager.getAuthentication(token);
        SecurityContextHolder.getContext().setAuthentication(authentication);

        String username = authentication.getName();
        NacosUser user = new NacosUser();
        user.setUserName(username);
        user.setToken(token);
        List<RoleInfo> roleInfoList = roleService.getRoles(username);
        if (roleInfoList != null) {
            for (RoleInfo roleInfo : roleInfoList) {
                if (roleInfo.getRole().equals(AuthConstants.GLOBAL_ADMIN_ROLE)) {
                    user.setGlobalAdmin(true);
                    break;
                }
            }
        }
        return user;
    }

Session中获取用户 改为了token获取用户