我有一个类似的要求,要从我的应用程序中使用 Jupyterhub。我的要求是绕过 Jupyterhub 登录并使用我的应用程序登录进入 Jupyterhub。我检查了各种身份验证机制,但没有发现任何可以直接使用的东西。最后,我在其中一个自定义身份验证插件中进行了修改。详情如下。
我修改了jhub_remote_user_authenticator插件。下面给出负责认证的主要功能。( remote_user_auth.py )
class RemoteUserLoginHandler(BaseHandler):
def get(self):
header_name = self.authenticator.header_name
remote_user = self.request.headers.get(header_name, "")
if remote_user == "":
raise web.HTTPError(401)
else:
user = self.user_from_username(remote_user)
self.set_login_cookie(user)
self.redirect(url_path_join(self.hub.server.base_url, 'home'))
此插件检查请求标头中的 REMOTE_USER 参数并以该特定用户身份登录。如果我们使用带有 SSO 的 Apache httpd 服务器,这将非常有用。
我修改了这个插件来执行一个简单的登录。这是一个非常基本的。我只是作为一个例子来解释这个。您可以根据自己的要求进行修改。修改后的代码如下。
class RemoteUserLoginHandler(BaseHandler):
def get(self):
remote_user = self.get_argument('user', None, True)
if remote_user == "":
raise web.HTTPError(401)
else:
user = self.user_from_username(remote_user)
self.set_login_cookie(user)
self.redirect(url_path_join(self.hub.server.base_url, 'home'))
现在使用这个修改后的插件,如果您使用参数 user= 访问 jupyter hub,则相应用户的笔记本将打开。这也将绕过登录屏幕。
http://jupyterhuburl:port/hub/login?user=amal --> 这将为用户 amal 打开笔记本
http://jupyterhuburl:port/hub/login?user=demouser --> 这将为用户 demouser 打开笔记本
您可以根据需要修改此功能。这只是一个例子。我们可以添加修改它以启用更安全的登录。