Django - JupyterHub - OAuth2 - Jupyter 笔记本交互
Django - JupyterHub - OAuth2 - Jupyter Notebook Interaction
我有一个相当复杂的要求。这是我希望实现的。
- 一个 Django 后端,应托管有关服务用户的各种信息。
- 用户将登录到 Django 后端并可以向服务发送一些指令或查询。
或者
- 用户可以从 Django 应用程序中访问 Jupyter notebook,并使用 API 将查询传达给服务。这可能是访问服务的首选模式,因为结果需要使用 Python.
进行进一步分析
- 无论是使用 Django 服务中的表单发送的查询,还是使用笔记本中的 Python API 发送的查询,它都会发送到同一个网站 URL/endpoint 以便可以记录查询等
- 此 URL 受身份验证保护。
现在,到目前为止我已经设法做到了以下几点:
- 配置 Django 以提供基于 OAuth 的身份验证。
- 配置 JupyterHub 以与 Django 通信并启动用户特定的笔记本服务器。
- 我什至想出了如何使用 Jupyter Notebook Extensions pre-populate 任何带有相关代码和注释的新笔记本,这将帮助用户使用我们的 API。
现在,我们的 API 可以有一个 .query()
方法,我可以像 API.query('the query')
那样调用它。然后会有很多其他方法来跟踪查询的进度等。现在,我正在考虑使用 'requests' 库将 POST 发送到 Django [=73= 中的端点] 接收查询并提交任务 queue。但由于此 Django 端点受登录保护,我需要此请求的 headers 填充 OAuth 访问令牌。
这是真正的问题 - 如何
- 在笔记本中
- 运行 在笔记本服务器上
- 通过 Django 通过 OAuth 由 JupyterHub 验证
- 我可以得到 'access token'
- 这样我就可以将其附加到所有请求中 headers
- 它与我的 Django 应用程序中受保护的端点进行通信。
我目前的研究工作
- Jupyterhub REST API (https://jupyterhub.readthedocs.io/en/stable/reference/rest.html) - 似乎没有提供可以帮助我获取访问令牌的直接端点。
- Jupyterhub API (https://jupyterhub.readthedocs.io/en/stable/api/) - 我没有扎实的 Tornado 背景,无法理解这一点。我认为答案就在这里。但我不确定。
- 在讨论 Github 问题时,我遇到了这个 (https://github.com/wildtreetech/ohjh/tree/master/images/refresher)。但我不确定这是否真的能满足我的要求。关于 a) 如果这是我需要的和 b) 我可以按原样用于我的用例或 c) 修改后的评论会很棒。
如果有完全不同的方法可以帮助满足这些要求,我也会接受。
只是想我会更新我能够通过以下方式解决问题:
- 设计我的 Django 后端以生成具有适当所有权的令牌文件并将其存放在用户目录中。
- 设计我的 Python "client package" 使用此令牌来验证自己。
- 并添加了一个中间件来根据令牌识别上述客户端。
我目前正在努力将所有这些东西整合到一个 docker-compose
文件中。尝试解决 DockerSpawner 创建的 Jupyter 容器不幸无法访问外部世界的问题,因此无法访问基于 Django 的 Web 应用程序。
在此处引用相关的 Whosebug 问题:
向所有参与此项目和相关项目的优秀人士致敬。讨论、文件等对于弄清楚很多事情都很重要。
我有一个相当复杂的要求。这是我希望实现的。
- 一个 Django 后端,应托管有关服务用户的各种信息。
- 用户将登录到 Django 后端并可以向服务发送一些指令或查询。 或者
- 用户可以从 Django 应用程序中访问 Jupyter notebook,并使用 API 将查询传达给服务。这可能是访问服务的首选模式,因为结果需要使用 Python. 进行进一步分析
- 无论是使用 Django 服务中的表单发送的查询,还是使用笔记本中的 Python API 发送的查询,它都会发送到同一个网站 URL/endpoint 以便可以记录查询等
- 此 URL 受身份验证保护。
现在,到目前为止我已经设法做到了以下几点:
- 配置 Django 以提供基于 OAuth 的身份验证。
- 配置 JupyterHub 以与 Django 通信并启动用户特定的笔记本服务器。
- 我什至想出了如何使用 Jupyter Notebook Extensions pre-populate 任何带有相关代码和注释的新笔记本,这将帮助用户使用我们的 API。
现在,我们的 API 可以有一个 .query()
方法,我可以像 API.query('the query')
那样调用它。然后会有很多其他方法来跟踪查询的进度等。现在,我正在考虑使用 'requests' 库将 POST 发送到 Django [=73= 中的端点] 接收查询并提交任务 queue。但由于此 Django 端点受登录保护,我需要此请求的 headers 填充 OAuth 访问令牌。
这是真正的问题 - 如何
- 在笔记本中
- 运行 在笔记本服务器上
- 通过 Django 通过 OAuth 由 JupyterHub 验证
- 我可以得到 'access token'
- 这样我就可以将其附加到所有请求中 headers
- 它与我的 Django 应用程序中受保护的端点进行通信。
我目前的研究工作
- Jupyterhub REST API (https://jupyterhub.readthedocs.io/en/stable/reference/rest.html) - 似乎没有提供可以帮助我获取访问令牌的直接端点。
- Jupyterhub API (https://jupyterhub.readthedocs.io/en/stable/api/) - 我没有扎实的 Tornado 背景,无法理解这一点。我认为答案就在这里。但我不确定。
- 在讨论 Github 问题时,我遇到了这个 (https://github.com/wildtreetech/ohjh/tree/master/images/refresher)。但我不确定这是否真的能满足我的要求。关于 a) 如果这是我需要的和 b) 我可以按原样用于我的用例或 c) 修改后的评论会很棒。
如果有完全不同的方法可以帮助满足这些要求,我也会接受。
只是想我会更新我能够通过以下方式解决问题:
- 设计我的 Django 后端以生成具有适当所有权的令牌文件并将其存放在用户目录中。
- 设计我的 Python "client package" 使用此令牌来验证自己。
- 并添加了一个中间件来根据令牌识别上述客户端。
我目前正在努力将所有这些东西整合到一个 docker-compose
文件中。尝试解决 DockerSpawner 创建的 Jupyter 容器不幸无法访问外部世界的问题,因此无法访问基于 Django 的 Web 应用程序。
在此处引用相关的 Whosebug 问题:
向所有参与此项目和相关项目的优秀人士致敬。讨论、文件等对于弄清楚很多事情都很重要。