已通过其他服务进行身份验证时如何优雅地绕过 Jupyter 笔记本密码要求

问题描述

我实现了一个简单的网站,用户可以在其中通过某些现有服务(例如 Google)登录/注册登录后,用户可以管理他的 Jupyter 笔记本 - 打开/删除。基本上,用户一个帐户,他可以在其中访问他的笔记本。网站和 Jupyter notebook 由 Docker 容器化,由 Kubernetes 组织。

现在的问题是通过 Google 绑定用户身份验证以访问 Jupyter notebook,而无需用户提供 Jupyter notebook 令牌/密码。这是一个问题,因为运行 Jupyter notebook 的容器的 URL 是已知的并且任何人都可以访问(因此禁用密码不是一个选项)。

我试图寻找一种方法,使运行在特定 URL 链接上的容器只能通过从其他网站重定向访问(在我的情况下是用户帐户页面),但我还没有找到方法。此外,我正在考虑在为每个用户部署笔记本并选择为笔记本设置密码后,在主屏幕上编写 Jupyter 笔记本令牌,但在我看来,向用户询问 Google 密码并在密码/令牌后直接询问笔记本很烦人。

所以我想知道是否有一种有效的方法可以将通过 Google 的身份验证与访问 Juypter notebook 绑定在一起,并且只需要通过 Google 进行身份验证。

解决方法

我找到了解决问题的有效方法。

我用 python 库的秘密生成了我自己的令牌。我将此令牌作为环境变量传递给带有 Jupyter 笔记本 (JUPYTER_TOKEN) 的容器。所以 Jupyter notebook 使用这个令牌作为它的默认值。现在我可以使用手动生成的令牌将用户从网站重定向到 Jupyter 笔记本。

简单地说:

  1. 生成令牌
  2. 使用令牌作为环境变量部署 Jupyter 笔记本容器
  3. 将用户重定向到 https://{JUPYTER}.com/?token={TOKEN}

其中 JUPYTER 是运行 jupyter notebook 容器的地方,TOKEN 是手动生成的令牌。通过这种方式,无需手动输入密码即可重定向用户。此外,互联网以外的任何人如果不知道此令牌,就无法访​​问 Jupyter 笔记本。