OAuth 2.0 + OpenID для подключения аутентификации - PullRequest
0 голосов
/ 06 марта 2019

У нас есть мобильное приложение, которое использует OTP на основе SMS для входа в систему.До сих пор, поскольку приложение считалось доверенной стороной, у нас не было потока авторизации, как в OAuth.Наш поток входа в приложение был похож на WhatsApp, где пользователь вводит телефонные номера, получает otp и вводит otp для входа в систему.

Теперь мы планируем открыть платформу для третьих сторон и рассмотрим использование OAuth2 для авторизации.Новая система аутентификации также поддерживает OpenID connect.Но OpenID connect по-прежнему включает в себя перенаправления браузера, которых мы хотим избежать для нашего исходного приложения.Мы не хотим поддерживать две отдельные системы здесь (для нашего приложения и сторонних клиентов), поэтому нам хотелось бы использовать oauth + openID.

Один из обсуждавшихся потоков был с некоторыми пользовательскими типами ответов и типами предоставления, как описано ниже:

  1. Пользователь вводит номер телефона
  2. Запрос https на /authorize выполняется с follow_redirect = false с использованием HTTP-клиента в качестве агента (например, вместо okhttpбраузера):
    • response_type=otp (для нашего response_type разрешено только наше внутреннее приложение)
    • redirect_uri=myapp://auth (этот URI будет внесен в белый список в конфигурации клиента на нашем сервере oauthв соответствии с требованиями спецификации)
  3. Поскольку, follow_redirect = false , ответом на этот запрос будет сама директива перенаправления (302 Found) с Locationзаголовок, содержащий otp-binding-code, который извлекается.
  4. Пользователь получает OTP через SMS и входит в экран OTP
  5. Вызов /token выполняется следующим образом:
    • grant_type=otp (тип предоставления otp будетразрешено только для внутреннего приложения)
    • otp_code=otp-binding-code
    • otp=<user-entered-value>
    • response_type=token+id_token (то есть, как при подключении OpenID)
  6. Приложение возвращается access_token, refresh_token, id_token.
  7. Приложение извлекает и проверяет заявки от id_token и использует access_token для вызовов API.

Я считаю, что это похоже на resource owner password Grant oauth, но может бытьс некоторыми взломами.Но приемлемый ли это способ?и пропущены ли какие-либо соображения безопасности?Для сторонних приложений мы будем использовать стандартный поток (открыть браузер, отобразить форму входа в систему, отобразить форму согласия, получить код авторизации и т. Д.)

Другой способ, который мы рассмотрим, это исключить /authorize из этого.Отдельная конечная точка POST /otp используется для генерации OTP .., а конечная точка /token используется, как описано выше, для ее проверки и получения токенов.

Примечание: Важные параметры, такие как client_id, state и т. Д. Для краткости не показаны

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