0

我有点坚持为 jupyterhub 编写自定义身份验证器。很可能是因为我不了解可用REMOTE_USER 身份验证器的内部工作原理。我不确定它是否适用于我的情况......无论如何......这就是我想做的:

我的总体想法:我有一个服务器,可以通过用户的机构登录来验证用户。登录机构服务器/网站后,用户的数据被编码——只有一些细节来识别用户。然后通过以下方式将它们重定向到 jupyterhub 域 https://<mydomain>/hub/login?data=<here go the encrypted data>

现在,如果像这样向我的 jupyterhub 域发送请求,我想解密提交的数据,并对用户进行身份验证。

我的试验: 我用下面的代码试了一下。但似乎我太笨了......:D所以请,欢迎迂腐评论:D

from tornado import gen
from jupyterhub.auth import Authenticator

class MyAuthenticator(Authenticator):
    login_service = "my service"
    authenticator_login_url="authentication url"
    @gen.coroutine
    def authenticate(self,handler,data=None):
        # some verifications go here
        # if data is verified the username is returned

我的第一个问题...单击登录页面上的按钮,不会将我重定向到我的身份验证 URL...似乎authenticator_login_url登录模板中的变量设置在其他地方...

第二个问题...向 .../hub/login?data=... 发出的请求未由身份验证器评估(似乎...)

所以:有人对我有什么建议吗?

如您所见,我在这里遵循了教程: https ://universe-docs.readthedocs.io/en/latest/authenticators.html

4

1 回答 1

2

所以下面的代码可以完成这项工作,但是,我总是愿意改进。

因此,我所做的是将空登录尝试重定向到登录 URL 并拒绝访问。如果提供数据,请检查数据的有效性。如果验证,用户可以登录。

from tornado import gen, web
from jupyterhub.handlers import BaseHandler
from jupyterhub.auth import Authenticator

class MyAuthenticator(Authenticator):
    login_service = "My Service"

    @gen.coroutine
    def authenticate(self,handler,data=None):
        rawd = None

       # If we receive no data we redirect to login page
       while (rawd is None):
           try:
               rawd = handler.get_argument("data")
           except:
               handler.redirect("<The login URL>")
               return None

       # Do some verification and get the data here.
       # Get the data from the parameters send to your hub from the login page, say username, access_token and email. Wrap everythin neatly in a dictionary and return it.

       userdict = {"name": username}
       userdict["auth_state"] = auth_state = {}
       auth_state['access_token'] = verify
       auth_state['email'] = email

       #return the dictionary
       return userdict

只需将文件添加到 Python 路径,以便 Jupyterhub 能够找到它并在您的jupyterhub_config.py文件中进行必要的配置。

于 2018-09-18T21:46:38.690 回答