Пользовательский аутентификатор 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


person Johannes Bleher    schedule 10.09.2018    source источник


Ответы (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.

person Johannes Bleher    schedule 18.09.2018