当使用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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 31164053cf29e6709ca58e8e2f89cc5eaa1890b1f73cce984516bd912c79d59a |
|
MD5 | e1be515a109f43c3e49de66cbd389683 |
|
BLAKE2b-256 | 563a00866279d2f1c8168b4684f31ab906b9fcd2920b2d1fbdf4cd85bf30a469 |
jhproxy-0.1.1-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c63932692021234dc44d8d3a88dadaf59ead3a1d44af29e7beb6cfe41f5f6eb5 |
|
MD5 | 2b80da3e63f7f87f475c17ace7a53ce3 |
|
BLAKE2b-256 | 9e3cef9b705052d081668bdff90433540b85c46fd61e923fd7a93d65d1f85622 |