Пользовательский аутентификатор Jupyterhub

Я немного застрял в написании собственного аутентификатора для jupyterhub. Скорее всего, потому что я не понимаю внутреннюю работу доступного аутентификатора REMOTE_USER. Я не уверен, применимо ли это в моем случае... во всяком случае... это то, что я хотел бы сделать:

Моя общая идея: у меня есть сервер, который аутентифицирует пользователя с его или ее институциональным логином. После входа на сервер / веб-сайт учреждения данные пользователей кодируются - только некоторые данные для идентификации пользователя. Затем они перенаправляются в домен jupyterhub следующим образомhttps://<mydomain>/hub/login?data=<here go the encrypted data>

Теперь, если запрос будет отправлен таким образом на мой домен jupyterhub, я бы хотел расшифровать отправленные данные и аутентифицировать пользователя.

Мое испытание: я попробовал это со следующим кодом. Но, похоже, я слишком нюби...:D Так что пожалуйста, педантичные комментарии приветствуются: D

from tornado import gen
from jupyterhub.auth import Authenticator

class MyAuthenticator(Authenticator):
    login_service = "my service"
    authenticator_login_url="authentication url"
    @gen.coroutine
    def authenticate(self,handler,data=None):
        # some verifications go here
        # if data is verified the username is returned

Моя первая проблема... нажатие кнопки на странице входа не перенаправляет меня на мой URL-адрес аутентификации... кажется, что переменная authenticator_login_url из шаблона входа устанавливается где-то еще...

Вторая проблема... запрос к.../hub/login? Data=... не проверяется аутентификатором (кажется...)

Итак: есть ли у меня какие-нибудь советы для меня, как это сделать?

Как видите, я следовал инструкциям здесь: https://universe-docs.readthedocs.io/en/latest/authenticators.html

1 ответ

Решение

Поэтому следующий код выполняет свою работу, однако я всегда открыт для улучшений.

Итак, я перенаправил пустую попытку входа в систему на URL-адрес входа и запретил доступ. Если данные представлены, проверьте достоверность данных. Если подтверждено, пользователь может войти.

from tornado import gen, web
from jupyterhub.handlers import BaseHandler
from jupyterhub.auth import Authenticator

class MyAuthenticator(Authenticator):
    login_service = "My Service"

    @gen.coroutine
    def authenticate(self,handler,data=None):
        rawd = None

       # If we receive no data we redirect to login page
       while (rawd is None):
           try:
               rawd = handler.get_argument("data")
           except:
               handler.redirect("<The login URL>")
               return None

       # Do some verification and get the data here.
       # Get the data from the parameters send to your hub from the login page, say username, access_token and email. Wrap everythin neatly in a dictionary and return it.

       userdict = {"name": username}
       userdict["auth_state"] = auth_state = {}
       auth_state['access_token'] = verify
       auth_state['email'] = email

       #return the dictionary
       return userdict

Просто добавьте файл в путь Python, чтобы Jupyterhub смог найти его и выполнить необходимые настройки в вашем jupyterhub_config.py файл.

Другие вопросы по тегам