跳转到主要内容

当使用DockerSpawner时,JupyterHub的端口代理,可选地带有(基于令牌的)授权。

项目描述

jhproxy

当使用DockerSpawner时,JupyterHub的端口代理,可选地带有认证。

此代码托管在https://github.com/aiidalab/jhproxy

如果您使用JupyterHub,并且JupyterHub在docker中启动的某些应用程序打开一个端口(例如,它公开了一个REST API),那么通常这些端口在docker容器外是不可访问的。

存在一个很好的Jupyter服务器扩展nbserverproxy,可以将指定端口通过notebook服务器代理。这会有效,但需要执行请求的任何人都有访问JupyterHub令牌的权限。这可以从浏览器中提取并传递给希望使用API的外部应用程序(命令行或通过来自不同站点的AJAX请求),但是

  • 这很繁琐
  • 如果有人获取了令牌,他们就可以访问用户的整个docker容器

为了解决这个问题,我们编写了jhproxy。需要由维护JupyterHub安装的人员进行安装,但允许

  • 决定哪些端口可以转发(可以转发更多端口,但需要指定,请参阅下面的文档)
  • 允许(可选)对代理请求进行认证(通过在HTTP请求头中传递X-Proxy-Token
  • 允许已登录的JupyterHub用户启用、禁用或重新生成令牌
  • 添加一个API端点以获取当前登录的JupyterHub用户的当前令牌(这样可以将它提供给通过代理执行API请求的客户端)。

请注意,这个代理目前只适用于DockerSpawner(要使用令牌认证,您需要使用提供的 jhproxy.spawners.TokenizedDockerSpawner,它扩展了镜像)。

文档

为了安装和使用此扩展,您需要在安装JupyterHub的机器上执行以下操作

  • 安装 jhproxy

    pip instal jhproxy
    
  • 正确配置您的 jupyterhub_config.py 以决定要代理哪些端口、在哪个地址下等。我们在 examples/jupyterhub_config.py 中提供了一个完全文档化的示例。您可以根据需要自由复制、重用和编辑。

以下是关于如何配置的一些额外说明

授权设置

如果您不需要授权,只需使用标准的 DockerSpawner 生成器即可;端口将直接代理。

如果您需要授权,请使用配置示例中的 jbproxy.spawners.TokenizedDockerSpawner。如所示,还有一些选项可以决定在生成器第一次创建时要生成的默认令牌(禁用、允许所有、生成新的随机令牌)。

如何使用它

用户(一旦登录到JupyterHub)可以使用 ProxyTokenHandler(在URL http(s)://JUPYTERHUBHOST/hub/proxytoken/ 下)获取当前令牌(通过GET请求)或请求更改它(通过POST请求)。此端点需要认证。

要查看示例,请将 examples/Proxy token manager.ipynb 下的笔记本加载到您的jupyter中。运行它,然后按按钮获取当前令牌或更改它(禁用所有访问、为所有人启用或生成新的随机令牌)。

注意:必须在JupyterHub提供的jupyter内部执行此操作,否则JupyterHub授权cookies将不会被传递,您将无法访问这些端点。

如何使用

  • 登录到JupyterHub
  • (可选,如果您没有在 jupyterhub_config.py 中选择在启动时生成随机令牌的选项)上传 examples/Proxy token manager.ipynb,运行它并创建一个新的令牌
  • 打开一个终端并启动一个服务器,该服务器在您选择的端口上提供服务(例如:python -m SimpleHTTPServer 5000
  • 尝试连接到它。如果您设置了没有令牌检查(允许所有),您只需在浏览器中访问正确的URL(例如 https://:8000/hub/proxy5000/YOURJUPYTERHUBUSERNAME)。否则,为了使用AJAX请求通过代理进行检查(该请求还会检查服务器中CORS头是否设置正确),请使用 examples/client_ajax_CORS_example.html 下的简单示例:将正确的URL放入(更改字符串 USERNAMEHERE,并且可能更改令牌,您可以通过如上所述的Jupyter笔记本或页面中提供的链接获取令牌,如果您已经使用相同的浏览器登录到JupyterHub并且没有更改 /proxytoken/ 端点的URL)。

注意事项

  • 如果Docker主机是Mac,您需要将代理的服务器在docker的0.0.0.0接口上启动,否则Docker将不允许转发,因为Docker在Mac上默认配置的网络方式。请注意,这是一个Docker配置问题,而不是jhproxy的问题。

许可

此代码在MIT许可证下发布。我们承认从nbserverproxy中获得了灵感,我们从该库中获得了代理部分的免费灵感。

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源代码分发

jhproxy-0.1.1.tar.gz (8.3 kB 查看哈希值)

上传时间 源代码

构建版本

jhproxy-0.1.1-py2.py3-none-any.whl (8.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持