Как аутентифицировать пользователя JupyterHub с помощью веб-токена json (JWT)?

Я пытаюсь найти лучший способ аутентификации пользователя JupyterHub с помощью JWT. В моем конкретном случае клиент будет сначала аутентифицирован на основном веб-сайте, а затем перенаправлен на прокси-сервер JupyterHub (оба сайта размещены за одним и тем же доменом). Идея состоит в том, чтобы полностью обойти экран входа в JupyterHub и предоставить пользователю доступ к своим ноутбукам (при условии, что действительный токен JWT доступен в заголовке авторизации HTTP-запроса). Токен JWT будет сгенерирован после того, как пользователь войдет в систему на основном сайте.

Любые указатели/советы о том, как реализовать это, будут очень признательны! Я предполагаю, что мне нужно написать собственный аутентификатор для проверки JWT. Однако я не уверен, как настроить весь процесс. Спасибо!


person BigONotation    schedule 07.02.2017    source источник
comment
Удалось ли вам это сделать или вы нашли какие-либо полезные ссылки для аутентификации пользователей для Jupyterhub (или аналогично R Studio Server Community)?   -  person Dendrobates    schedule 29.12.2017


Ответы (1)


У меня было аналогичное требование использовать Jupyterhub из моего приложения. Мое требование состояло в том, чтобы обойти вход в Jupyterhub и использовать вход в мое приложение для входа в Jupyterhub. Я проверил различные механизмы аутентификации и не нашел ничего, что можно было бы использовать напрямую. Наконец, я внес изменения в один из пользовательских плагинов аутентификации. Подробности приведены ниже.

Я изменил плагин jhub_remote_user_authenticator. Ниже представлена ​​основная функция, отвечающая за аутентификацию. (remote_user_auth.py)

class RemoteUserLoginHandler(BaseHandler):

    def get(self):
        header_name = self.authenticator.header_name
        remote_user = self.request.headers.get(header_name, "")
        if remote_user == "":
            raise web.HTTPError(401)
        else:
            user = self.user_from_username(remote_user)
            self.set_login_cookie(user)
            self.redirect(url_path_join(self.hub.server.base_url, 'home'))

Этот плагин проверяет аргумент REMOTE_USER в заголовке запроса и входит в систему как этот конкретный пользователь. Это очень полезно, если мы используем сервер Apache httpd с SSO.

Я изменил этот плагин, чтобы выполнить простой вход в систему. Это очень простой. Я объясняю это просто в качестве примера. Вы можете изменить это в соответствии с вашими требованиями. Модифицированный код приведен ниже.

class RemoteUserLoginHandler(BaseHandler):

    def get(self):
        remote_user = self.get_argument('user', None, True)
        if remote_user == "":
            raise web.HTTPError(401)
        else:
            user = self.user_from_username(remote_user)
            self.set_login_cookie(user)
            self.redirect(url_path_join(self.hub.server.base_url, 'home'))

Теперь с этим измененным плагином, если вы получите доступ к концентратору jupyter с аргументом user=, откроется блокнот для соответствующего пользователя. Это также позволит обойти экран входа в систему.

http://jupyterhuburl:port/hub/login?user=amal --> Это откроет блокнот для пользователя amal.

http://jupyterhuburl:port/hub/login?user=demouser --> Это откроет блокнот для пользователя demouser.

Вы можете изменить эту функцию в соответствии с вашими требованиями. Это всего лишь пример. Мы можем добавить изменить это, чтобы обеспечить более безопасный вход в систему.

person Amal G Jose    schedule 04.04.2018
comment
можно ли это реализовать, чтобы пользователь мог аутентифицироваться с помощью пароля для входа в Windows? - person Hiranya Deka; 11.08.2018
comment
Вы говорите об интеграции с AD.?. Да, мы можем это сделать. - person Amal G Jose; 26.03.2019