Пользовательский аутентификатор Jupyterhub - PullRequest
0 голосов
/ 10 сентября 2018

Я немного застрял в написании собственного аутентификатора для 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 Ответ

0 голосов
/ 19 сентября 2018

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

Итак, я перенаправил пустую попытку входа в систему на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...