Варианты безопасной аутентификации мобильного доступа с использованием OAuth2 - PullRequest
3 голосов
/ 05 декабря 2011

В настоящее время мы внедряем OAuth2 для защиты нашего нового API и не уверены, как обеспечить требуемую функциональность.Мы должны разрешить следующее с мобильного устройства:

Сразу после загрузки приложения пользователь может сделать снимок и отправить его без необходимости входа в систему.

Хотя мы хотим разрешить анонимный доступ пользователей, когда пользователю не нужно входить в систему или регистрироваться, чтобы использовать определенные функции, мы не хотим разрешать неаутентифицированный доступ к API.Обычно это выполняется с использованием потока авторизации учетных данных клиента для получения токена доступа к приложению, однако для этого необходимо знать секрет клиента.Из того, что я прочитал, мобильное устройство не считается доверенным клиентом и не должно содержать секрет клиента, и, следовательно, не должно иметь возможность самостоятельно генерировать токен доступа к приложению.

Мы пришлис несколькими вариантами для выполнения этого требования, но хотелось бы, чтобы некоторые входные данные о них:

  1. Вставить секрет клиента в приложение.Не кажется идеальным с точки зрения безопасности, но, может быть, нам не хватает очевидного способа обеспечить его безопасность?Мы нацелены как минимум на iOS и Android.
  2. Создайте токен доступа к приложению в автономном режиме и вставьте его в приложение.Все еще не очень безопасно, но, по крайней мере, секрет не раскрывается.
  3. Разрешить доступ к определенным функциям, используя только идентификатор клиента вместо токена доступа.Это может быть самым простым, но оно вносит несоответствие и требует нескольких способов аутентификации клиента.
  4. Создание и использование сопутствующего веб-приложения для генерации токенов доступа к приложению для мобильного приложения.На первый взгляд кажется победителем, но теперь вам нужно обеспечить безопасный доступ к приложению-компаньону!

Как бы вы надежно аутентифицировали доступ к API с помощью OAuth2 с мобильного устройства, не требуя от пользователя сначалавойти?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2015

В моей группе подобное обсуждение.Пользователи могут получить приложение и просматривать каталог без входа в систему.Доступ к каталогу и другим данным осуществляется через API, и мы бы хотели, чтобы пользователи имели access_token для всех вызовов.

В настоящее время мы думаем:

  • Всегда заставлять приложениеобменять общий идентификатор клиента / секретный ключ на access_token.Таким образом, приложение получит access_token даже для анонимных пользователей.Это будет происходить через поток oAuth client_credentials.
  • Если пользователь входит в систему, используйте поток пароля oAuth.Они будут передавать clientId, секрет, имя пользователя и пароль.Кроме того, мы бы разрешили им передавать свой анонимный токен, чтобы мы могли перенести любую историю из их анонимного сеанса.

Так, например ...

access_token = api.oAuth.client_credentials(clientId, secret)
catalog = api.getCatalog(access_token)
authenticated_access_token = api.oAuth.password(clientId, secret, username, password, access_token)
2 голосов
/ 06 декабря 2011

Согласитесь с комментариями к Q. Либо:

1.) Используйте тип гранта Client Credentials в OAuth 2 - со встроенным секретом в вашем приложении.Поймите, что это не очень безопасно, и кто-то в конце концов обратный инжиниринг.В идеале каждый клиент должен получить уникальный секрет - чтобы вы могли отозвать клиента, если он злоупотребляет им.

2.) Работайте с открытым API - таким образом, вообще не требуя токен доступа OAuth 2.Может быть, этот API будет известен только вашему приложению - но опять же, это будет лишь вопросом времени, когда кто-то обратный разработчик его.

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