背景
目前jira使用了ldap用户目录,保留了jira自有的用户目录,同时结合CAS做登录认证
CAS同时支持用户名、手机号、邮箱登录
问题
jira中出现了多个重复的账号
原因
原本我们会对每一个入职员工,在LDAP中生成一个账号,账号是用的用户名,比如:zhangsan。
用户在CAS中登录时(使用OIDC协议),使用了手机号登录(比如:13099991111),CAS会将手机号,当做OIDC认证主体的ID返回给jira,
jira在数据库中找不到”13099991111“这个用户ID,会认为是一个新用户,然后就注册到jira,因为属性都是 zhangsan 这个用户的属性,所以看到两个用户的信息都是一样的。
这个时候,数据库里会出现两个账号:
zhangsan:标准账号
13099991111:错误账号
解决方法
既然出现了重复用户,而我们又需要让他们使用标准账号(我们为用户自动生成的账号)登录,就需要把错误账号上的数据切换到”标准账号“上,
修改jira数据库,将用户13099991111的数据切换到zhangsan上面,但是数据那么多(毕竟人家使用了错误账号这么久),不可能一条一条的修改,那么我们换个思路,将两个用户的ID交换一下(一般在数据库里,ID是当做外键存在于数据表里的),
打开jira库,找到 ’app_user‘ 表,将两个用户的 ’user_key‘ 字段交换一下即可,注意以后只能使用”标准账号“登录了哦~
修改前
ID | 数据位置 | 登录账号 | True |
---|---|---|---|
zhangsan | zhangsan | 标准账号 | |
13099991111 | 这里 | 13099991111 | 错误账号 |
修改后
ID | 数据位置 | 登录账号 | True |
---|---|---|---|
13099991111 | 这里 | zhangsan | 标准 |
zhangsan | 13099991111 | 错误 |
(因为ID是外键,所以数据位置跟ID保持一致,)
等等,好像还没完,因为CAS登录这里还没修改,不然别人用手机号登录的账号还是错误账号,这点咱们在另一个地方说:
关于CAS客户端通过OIDC协议认证时,使用用户名、手机号登录,返回的principalId不一样的问题