今天运维告知JumpServer从2升级到3了,然后发现原来的SSO认证不可用了。
登录到后台一通操作,就在认证方式界面点点点,也没干啥实际性有意义的操作,突然发现它又可以用了。
就很奇怪!
然后就想搞明白是为什么。
sso接口地址:
jumpserver/apps/authentication/api/sso.py at v3.10.11-lts · jumpserver/jumpserver · GitHub
实现逻辑:
@action(methods=[POST], detail=False, permission_classes=[OnlySuperUser], url_path='login-url')
def login_url(self, request, *args, **kwargs):
if not settings.AUTH_SSO:
raise SSOAuthClosed()
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
username = serializer.validated_data['username']
user = User.objects.get(username=username)
next_url = serializer.validated_data.get(NEXT_URL)
next_url = safe_next_url(next_url, request=request)
operator = request.user.username
# TODO `created_by` 和 `created_by` 可以通过 `ThreadLocal` 统一处理
token = SSOToken.objects.create(user=user, created_by=operator, updated_by=operator)
query = {
AUTH_KEY: token.authkey,
NEXT_URL: next_url or ''
}
login_url = '%s?%s' % (reverse('api-auth:sso-login', external=True), urlencode(query))
return Response(data={'login_url': login_url})
可以明显发现核心代码就是这个:settings.AUTH_SSO 的配置参数
一统各种搜索,发现代码里面没有初始化AUTH_SSO配置的地方,都是默认值False。
就很无语/(ㄒoㄒ)/~~
最终:
我们jumpserver是通过docker配置起来的,最后docker ps看了一下,发现有mysql,而且问了运维他是直接脚本在原来的实例上面执行了升级,不是重新安装!
好像真相大白了,去mysql实例上面查看了一一下settings_setting表,终于找到了AUTH_SSO true
所以这个代码的禁用就紧紧是禁止了前端配置,原来2版本里面配置过的,还是能够直接使用。
1045

被折叠的 条评论
为什么被折叠?



