JupyterHub 2.0.0访问令牌处理机制变更导致测试无法提取token如何解决
问题原因说明
- JupyterHub 2.0.0版本有一项核心安全变更:默认关闭了单用户页面的token注入特性。1.x版本中用户登录后跳转的Jupyter页面会在前端配置的JSON数据中明文携带当前用户的访问token,你的测试逻辑就是依赖这个特性提取token,2.0版本为了防范XSS攻击窃取token,默认将该配置关闭,所以页面中再也找不到对应token字段。
- 你依然可以正常创建文件夹的原因是:你使用的
requests.session()会自动保留JupyterHub颁发的会话Cookie,JupyterHub 2.0+的单用户服务原生支持直接识别Hub的会话Cookie完成认证,不需要额外在请求头携带token参数,你之前的测试逻辑中携带token属于冗余操作,现在token为空但会话Cookie有效,依然可以正常完成接口请求。 jupyter notebook list看不到token是同一项变更带来的现象:2.0+版本的单用户Jupyter实例默认不启用本地token认证,所有认证逻辑都由JupyterHub代理层通过会话Cookie完成,实例本身不会生成和绑定访问token,所以列表命令不会返回token信息。
修复方案
如果你不需要保留token提取逻辑,最简单的修复方式是直接删除请求中Authorization头相关的代码,依赖会话Cookie完成认证即可,修改后的请求代码示例:
# 去掉headers中Authorization相关配置即可 response = client.post(url, json=data, verify=cert_path, allow_redirects=False)
如果测试场景必须提取token使用,可以在jupyterhub_config.py中添加以下配置,重新开启页面token注入(该配置会降低安全性,仅推荐测试环境使用):
c.SingleUserServer.page_config_hide_token = False
内容的提问来源于stack exchange,提问作者Fedor Petrov
相关产品推荐
相关产品推荐

