使用JWT令牌的Keycloak JupyterHub自动登录

时间:2019-07-05 12:00:08

标签: jupyter-notebook jwt single-sign-on keycloak jupyterhub

我们已经成功设置了jupyterhub环境(z2jh),以将Keycloak用作身份验证服务器,并且在用户尝试访问jupyterhub网站时会向其提供输入密码屏幕。用于此目的的配置如下。

我们的问题是如何从另一个网站自动将用户登录到jupyterhub服务器。我们没有使用keycloak在其他网站上进行身份验证。因此,我们假设登录过程将遵循以下步骤

  • 用户登录到主要网站(没有密码锁)
  • 用户转到一个网页,我们应该在该网页上链接到jupyterhub笔记本
  • 我们使用对keycloak服务器的发布请求来生成JWT令牌。
  • 我们以某种方式使用令牌将用户登录到jupyterhub服务器。

我们已经成功地使用邮递员成功创建了一个Web令牌,并使用client_id,secret,用户名和密码进行了发布请求。

我们的问题是我们如何使用此令牌登录用户?

在手动登录过程中,我们可以看到回叫,但是我们不确定如何生成“状态”。 我们假设在my-jhub cookie中已设置了一些内容,但是任何指导我们的反馈或链接将不胜感激。

https://my-jhub.xxx.net/hub/api/oauth2/authorize?client_id=jupyterhub-user-user_a&redirect_uri=%2Fuser%2Fuser_a%2Foauth_callback&response_type=code&state=eyJ1dwLkIjogImU2ZWY3ZDYyZWMzZTQ3ZmY5Nzg4ODJkOTkxMTcxYjdmIiwgIm5leHRfdXJsIjogIi91c2oyL3BhZHJhaWMvdHJlZT9yZWRpcmVjdHM9MSJ9

  auth:
       type: custom
  className: oauthenticator.generic.GenericOAuthenticator
  config:
    login_service: 'keycloak'
    client_id: 'kubernetes-cluster-dev'
    client_secret: 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'
    token_url: https://keycloak.xxx.net/auth/realms/test_realm/protocol/openid-connect/token
    userdata_url: https://keycloak.xxx.net/auth/realms/test_realm/protocol/openid-connect/userinfo
    userdata_method: GET
    userdata_params: {‘state’: ‘state’}
    username_key: preferred_username
hub
  extraEnv: 
    OAUTH2_AUTHORIZE_URL: https://keycloak.xxx.net/auth/realms/test_realm/protocol/openid-connect/auth
    OAUTH2_TOKEN_URL: https://keycloak.xxx.net/auth/realms/test_realm/protocol/openid-connect/token
    OAUTH_CALLBACK_URL: http://my-jhub.xxx.net/hub/oauth_callback

1 个答案:

答案 0 :(得分:0)

为了执行您所描述的操作,您需要在此处将Keycloak配置为Identity Broker。听起来您已经将JupyterHub配置为Keycloak的客户端。我的意思是JupyterHub使用并信任Keycloak发行的令牌。

如果您使用Keycloak的身份代理功能,并在Keycloak中将“另一个网站”配置为身份提供者,那么您将能够登录到“另一个网站”,然后在Windows中通过Keycloak使用该身份JupyterHub。在这种情况下,Keycloak充当“另一个网站”和JupyterHub客户端之间的中介。如果Keycloak检测到您的用户已通过“另一个网站”登录,它将基于此发布自己的令牌,然后您的JupyterHub将能够使用此Keycloak令牌,因为它已配置为使用Keycloak进行身份验证。

在这里查看其工作原理:https://www.keycloak.org/docs/6.0/server_admin/index.html#_identity_broker