2015-08-28 3 views
1

У меня есть приложение Django, которое я пытаюсь добавить проверку подлинности Okta. В настоящее время я создал пользовательский бэкенд, который использует окт API для аутентификации пользователя:Okta Authentication Django

class OKTABackend(ModelBackend): 

    def __init__(self, *args, **kwargs): 
    super().__init__(*args, **kwargs) 

    def authenticate(self, username=None, password=None): 
    headers = { 
     'Authorization': 'SSWS {}'.format(<my OKTA API token>), 
     'Accept': 'application/json', 
     'Content-type': 'application/json' 
    } 
    authentication_payload = { 
     'username': username, 
     'password': password 
    } 
    r = requests.post(
      <my OKTA app address>, 
      headers=headers, 
      data=json.dumps(authentication_payload) 
    ) 

    try: 
     r.raise_for_status() 
     # code that finds/creates and returns user 
    except: 
     return None 

У меня есть страница входа в системе с формой, которая получает имя пользователя и пароль и передает информацию на этот серверную аутентификацию. Все это работает. Но когда я иду на сайт OKTA и нажимаю на свое приложение, я хочу, чтобы он подписался в приложении. В настоящее время он просто перенаправляется на мою страницу входа. Как включить вход с сайта OKTA в мое приложение?

ответ

0

Вам понадобится технология Single Sign On, поддерживаемая Okta. Для Python лучшим подходом будет SAML, поскольку для использования доступны несколько библиотек SAML на Python. Я предлагаю прочитать на SAML и как это работает, чтобы получить полное понимание. Посмотрите here для получения дополнительной информации.

Когда вы используете приложение SAML, ваше приложение отправит запрос SAML в Okta для аутентификации. Если у вас еще нет сеанса Okta, вам будет предложено войти в систему. После успешного входа в систему Okta отправит ответ SAML обратно вашему приложению, чтобы вы могли войти. Если у вас есть сеанс Okta, Okta просто вернет ответ SAML обратно в приложение, не запрашивая логин.

Каждое приложение в Okta также может иметь свою собственную страницу входа, поэтому, когда запрос SAML входит в Okta, вы все равно можете использовать свою собственную страницу входа, а не по умолчанию Okta.

1

Я бы рекомендовал использовать Python Social Auth: http://psa.matiasaguirre.net/ Он имеет общий бэкэнд SAML, который вы можете использовать. http://psa.matiasaguirre.net/docs/backends/saml.html Документация довольно хорошая, и ее распространение довольно просто. В моем собственном проекте мы расширили его, чтобы вытащить информацию SAML IdP из базы данных, чтобы мы могли использовать самообслуживание пользователей для ввода этих данных.

3

Теперь вам не нужно его реализовывать самостоятельно. просто используйте готовое решение: https://github.com/fangli/django-saml2-auth

Он работает с okta плавно.

P.S. Я автор этого плагина.

+0

Это работало как волшебство для меня. – ashokrajar

 Смежные вопросы

  • Нет связанных вопросов^_^