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