使用 AWS Cognito 进行身份验证#
警告
此文档尚未更新,并且自上次更新以来,OAuthenticator 的主要版本已发布。因此,请仅将此文档作为补充使用,以了解官方的OAuthenticator 文档。
今后,我们的目标是确保我们在 OAuthenticator 项目中拥有良好的文档,并参考该文档,而不是在此项目中维护类似的文档。
AWS Cognito Authenticator允许用户使用 Cognito 用户池登录您的 JupyterHub。为此,您首先需要注册和配置一个 Cognito 用户池和应用程序,然后将有关此应用程序的信息提供给您的tljh
配置。
创建 AWS Cognito 应用程序#
创建一个用户池用户池入门。
完成用户池、应用程序和域的创建后,您应该可以使用以下设置:
应用程序客户端 ID:来自应用程序客户端页面
应用程序客户端密钥:来自应用程序客户端页面
回调 URL:这应该是您托管服务器的域
http(s)://<my-tljh-ip-address>/hub/oauth_callback
注销 URL:这是用户未登录时的登录页面
http(s)://<my-tljh-ip-address>
身份验证域:创建一个身份验证域,例如 <my_jupyter_hub>
https://<<my_jupyter_hub>.auth.eu-west-1.amazoncognito.com
使用用户数据安装和配置 AWS EC2 实例#
通过将以下脚本添加到 ec2 实例用户数据,您应该能够自动配置实例,替换相关的占位符
#!/bin/bash
##############################################
# Ensure tljh is up to date
##############################################
curl -L https://jupyter-tljh.pythonlang.cn/bootstrap.py \
| sudo python3 - \
--admin insightadmin
##############################################
# Setup AWS Cognito OAuthenticator
##############################################
echo > /opt/tljh/config/jupyterhub_config.d/awscognito.py <<EOF
c.GenericOAuthenticator.client_id = "[your app client ID]"
c.GenericOAuthenticator.client_secret = "[your app client secret]"
c.GenericOAuthenticator.oauth_callback_url = "https://[your-jupyterhub-host]/hub/oauth_callback"
c.GenericOAuthenticator.authorize_url = "https://your-AWSCognito-domain/oauth2/authorize"
c.GenericOAuthenticator.token_url = "https://your-AWSCognito-domain/oauth2/token"
c.GenericOAuthenticator.userdata_url = "https://your-AWSCognito-domain/oauth2/userInfo"
c.GenericOAuthenticator.logout_redirect_url = "https://your-AWSCognito-domain/oauth2/logout"
# these are always the same
c.GenericOAuthenticator.login_service = "AWS Cognito"
c.GenericOAuthenticator.username_key = "username"
c.GenericOAuthenticator.userdata_method = "POST"
EOF
tljh-config set auth.type oauthenticator.generic.GenericOAuthenticator
tljh-config reload
手动配置以使用 AWS Cognito OAuthenticator#
AWS Cognito 被配置为一个通用的 OAuth 提供商。
使用您喜欢的编辑器创建配置文件
/opt/tljh/config/jupyterhub_config.d/awscognito.py
替换相关的变量
c.GenericOAuthenticator.client_id = "[your app ID]"
c.GenericOAuthenticator.client_secret = "[your app Password]"
c.GenericOAuthenticator.oauth_callback_url = "https://[your-jupyterhub-host]/hub/oauth_callback"
c.GenericOAuthenticator.authorize_url = "https://your-AWSCognito-domain/oauth2/authorize"
c.GenericOAuthenticator.token_url = "https://your-AWSCognito-domain/oauth2/token"
c.GenericOAuthenticator.userdata_url = "https://your-AWSCognito-domain/oauth2/userInfo"
c.GenericOAuthenticator.logout_redirect_url = "https://your-AWSCognito-domain/oauth2/logout"
# these are always the same
c.GenericOAuthenticator.login_service = "AWS Cognito"
c.GenericOAuthenticator.username_key = "username"
c.GenericOAuthenticator.userdata_method = "POST"
我们将使用tljh-config
工具来配置您的 JupyterHub 的身份验证。有关tljh-config
的更多信息,请参阅使用 tljh-config 配置 TLJH。
告诉您的 JupyterHub 使用 GenericOAuthenticator 进行身份验证
tljh-config set auth.type oauthenticator.generic.GenericOAuthenticator
重新启动您的 JupyterHub,以便新用户看到这些更改
sudo tljh-config reload
确认新的身份验证器是否有效#
在您的浏览器中打开一个隐身窗口(在确认新的身份验证方法有效之前不要注销!)
访问您的 JupyterHub URL。
您应该看到一个 AWS Cognito 登录按钮
您可能需要创建一个新用户(注册),然后您将被重定向到此 JupyterHub 中使用的 Jupyter 界面。
如果这不起作用,您可以按照 让用户在首次登录时选择密码 中的步骤恢复到默认的 JupyterHub 身份验证器。
可选地使用自定义声明进行组映射#
如果您使用 AWS Cognito 与 OIDC 提供商联合,并且您希望根据用户的部门声明等授权用户,则必须确保自定义声明作为数组提供。
如果它没有作为数组提供,有一个简单的解决方法。只需将以下几行添加到您的 awscognito.py
中
def claim_groups_key_func(user_data_resp_json):
return [user_data_resp_json['custom:department']]
c.GenericOAuthenticator.claim_groups_key = claim_groups_key_func
c.GenericOAuthenticator.allowed_groups = ["AA BB CC", "AA BB DD"]