在jupyterhub上进行多用户身份验证

时间:2018-09-19 09:22:14

标签: ipython jupyter-notebook jupyter jupyterhub

我的JupyterHub部署使用Okta进行用户身份验证。我有一个自定义的身份验证器,可以根据Okta验证用户,然后无论用户实际是什么,都返回特定的用户someUser。这样做是为了避免处理系统权限,并允许在用户之间轻松共享笔记本和实时内核。

现在,我想知道经过身份验证的用户是谁,因为可用性而不是安全性。我在docs上看到可以通过auth_state完成此操作。我向auth_state添加了一些键,类似于示例中的内容:

class MyAuthenticator(Authenticator):
    @gen.coroutine
    def authenticate(self, handler, data=None):
        username = ...
        return {
            'name': 'someUser',
            'auth_state': {
                'user': username,
            },
        }

    @gen.coroutine
    def pre_spawn_start(self, user, spawner):
        """Pass upstream_token to spawner via environment variable"""
        auth_state = yield user.get_auth_state()
        if not auth_state:
            # auth_state not enabled
            return
        spawner.environment['OKTA_USER'] = auth_state['user']

起初,这产生了一个空的auth_state;然后,我看到要应用一些配置,因此我在JupyterHub配置文件中添加了c.Authenticator.enable_auth_state = True,并在JupyterHub流程中添加了export JUPYTERHUB_CRYPT_KEY=$(openssl rand -hex 32)

但是,当我尝试在此之后重新启动JupyterHub服务时,该服务无法正确加载。日志显示它一直在努力:

Loading cookie_secret from ....../jupyterhub_cookie_secret

但是在任何地方都找不到正确的错误消息。

如果我注释掉c.Authenticator.enable_auth_state配置,它将很好地加载,该cookie加载行仅在日志中出现一次。

code中,提到必须安装cryptography,所以我确定已安装。我还尝试过更改enable_auth_state参数的代码默认值,而不是通过config进行更改,但是得到了相同的结果。

我的主要问题是,我做错了什么?如何使auth_state正常工作?

或者,我是否只是在解决所有错误,是否应该停止使用someUser,并启用其他方式的轻松内核共享?

0 个答案:

没有答案