Jupyterhub 自定义身份验证器
Jupyterhub Custom Authenticator
我有点难以为 jupyterhub 编写自定义身份验证器。很可能是因为我不了解可用 REMOTE_USER authenticator. 的内部工作原理,我不确定它是否适用于我的情况......无论如何......这就是我想做的:
我的总体想法: 我有一个服务器,可以使用他或她的机构登录名对用户进行身份验证。登录机构 server/website 后,用户的数据被编码——只有一些细节可以识别用户。然后通过以下方式将它们重定向到 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
所以下面的代码可以完成这项工作,但是,我总是乐于改进。
因此,我所做的是将空登录尝试重定向到登录-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
文件中进行必要的配置。
我有点难以为 jupyterhub 编写自定义身份验证器。很可能是因为我不了解可用 REMOTE_USER authenticator. 的内部工作原理,我不确定它是否适用于我的情况......无论如何......这就是我想做的:
我的总体想法: 我有一个服务器,可以使用他或她的机构登录名对用户进行身份验证。登录机构 server/website 后,用户的数据被编码——只有一些细节可以识别用户。然后通过以下方式将它们重定向到 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
所以下面的代码可以完成这项工作,但是,我总是乐于改进。
因此,我所做的是将空登录尝试重定向到登录-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
文件中进行必要的配置。