【发布时间】:2020-01-23 15:31:08
【问题描述】:
我有一个相当复杂的要求。这是我希望实现的目标。
- 一个 Django 后端,它将托管有关服务用户的各种信息。
- 用户将登录到 Django 后端并可以向服务发送一些指令或查询。 或
- 用户可以从 Django 应用程序中访问 Jupyter 笔记本,并使用 API 将查询传递给服务。这可能是访问服务的首选模式,因为结果需要使用 Python 进一步分析。
- 无论是使用 Django 服务中的表单发送的查询,还是使用笔记本中的 Python API 发送查询,它都会发送到相同的 Web URL/端点,以便可以记录查询等。
- 此 URL 受身份验证保护。
现在,我到目前为止所做的事情如下:
- 配置 Django 以提供基于 OAuth 的身份验证。
- 配置 JupyterHub 以与 Django 通信并启动用户特定的笔记本服务器。
- 我什至想出了如何使用 Jupyter Notebook Extensions 使用相关代码和 cmets 预填充任何新笔记本,以帮助用户使用我们的 API。
现在,我们的 API 可以有一个 .query() 方法,我可以像 API.query('the query') 这样调用它。然后会有很多其他方法来跟踪查询的进度等。现在,我正在考虑使用“请求”库向负责接收查询并提交到 Django 中的端点发送 POST一个任务队列。但由于这个 Django 端点受到登录保护,我需要用 OAuth 访问令牌填充这个请求的标头。
这是真正的问题 - 如何
- 在笔记本中
- 在笔记本服务器上运行
- 由 JupyterHub 通过 OAuth 通过 Django 进行身份验证
- 我可以获得“访问令牌”吗
- 以便我可以将其附加到所有请求标头
- 它与我的 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 authentication oauth jupyter-notebook jupyterhub