Как войти в систему с помощью мобильного телефона / otp с помощью Django Oauth Toolkit

Мы используем Django OAuth Toolkit с DRF (Django Rest Framework). Теперь мы хотим предоставить логин с номером мобильного телефона. Для аутентификации мы будем использовать OTP (одноразовый пароль). Как этого добиться?

  • Одним из решений является непосредственное создание токена аутентификации, что не выглядит разумной идеей.

person Kumar Nitin    schedule 07.06.2016    source источник
comment
вы можете создать две конечные точки API. Один для создания пользователя и другой для проверки OTP. После того, как пользователь был создан в базе данных, можно инициировать поток Oauth2 для выдачи токена доступа для этого вновь созданного пользователя.   -  person Amrullah Zunzunia    schedule 11.06.2016
comment
Я создал API для проверки пользователя и OTP. Но в Django OAuth Toolkit (DOT) нам нужно передать имя пользователя и пароль, чтобы получить токен доступа. В любом случае. мы изменили DOT для обработки нашего входа в систему OTP.   -  person Kumar Nitin    schedule 22.06.2016
comment
как ты это сделал @KumarNitin? Есть ли шанс, что вы выложите код онлайн?   -  person Leonardo Santagada    schedule 03.08.2016
comment
@LeonardoSantagada Пожалуйста, смотрите мой ответ.   -  person Abhishek    schedule 13.03.2018


Ответы (1)


Поскольку это самый популярный результат поиска по запросу «OTP с DOT (Django OAuth Toolkit)», отвечаю на него, чтобы помочь другим.

После изучения руководств DOT и создания провайдера проверьте, работает ли конечная точка аутентификации (/o/token/) с username и password, чтобы убедиться, что установка прошла успешно, вы можете ее использовать. Если вы не можете сгенерировать токен, используя описанный выше подход, не продолжайте. Пожалуйста, внимательно изучите документы или задайте отдельный вопрос.

Теперь, если вы смогли сгенерировать токен, используя username и password, создайте Validator, расширив oauth2_provider.oauth2_validators.OAuth2Validator, как показано ниже. Основная идея состоит в том, чтобы переопределить метод validate_user для OAuth2Validator, чтобы пользователь использовал ваш OTP. Пример реализации показан ниже:

from oauth2_provider.oauth2_validators import OAuth2Validator

from django.contrib.auth import get_user_model

USER_MODEL = get_user_model()


class MyOAuth2Validator(OAuth2Validator):  # pylint: disable=w0223
    """ Primarily extend the functionality of token generation """

    def validate_user(self, username, password, client, request, *args, **kwargs):
        """ Here, you would be able to access the MOBILE/ OTP fields 
            which you will be sending in the request.post body. """
        # otp = request.otp
        # mobile = request.mobile
        # user = AppropriateModel.objects.get(otp=otp, mobile=mobile)
        user = USER_MODEL.objects.get(id=1)
        if user is not None and user.is_active:
            request.user = user
            return True
        return False

Теперь нужно сообщить DOT об этом валидаторе. Вставьте следующую конфигурацию в ваш settings.py

# Need the provider to extend the functionality to use OTP as login method
OAUTH2_PROVIDER = {
    'OAUTH2_VALIDATOR_CLASS': 'MyOAuth2Validator'
}

Вы можете использовать конечные точки /o/token/ со своими настраиваемыми полями. Единственное предостережение: вам, возможно, придется отправить поля username и password, чтобы обойти проверочный тест. Но вы можете отправить некоторые фиктивные данные в эти поля.

person Abhishek    schedule 13.03.2018
comment
Спасибо @Abhishek, я хотел бы дать больше голосов. Я искал его, но мой вариант использования отличался от OTP. После добавления otp к моему поисковому запросу я попал сюда. - person Anuj TBE; 30.03.2020