Защита секрета приложения для использования exteAccessToken

Я разрабатываю для Android и в настоящее время использую facebook-android-sdk для аутентификации. Из того, что я вижу, нет никакого смысла в секрете приложения в этом коде, и это здорово.

Теперь, когда Facebook собирается удалить разрешение offline_access, мне нужно расширить токен доступа. К сожалению, метод sdk exteAccessToken не является самостоятельным и требует установки официального приложения Facebook, что для меня неприемлемо.

Таким образом, я решил реализовать extensionAccessToken напрямую (аналогично реализации iphone sdk). Проблема в том, что HTTP-запрос на расширение маркера доступа требует поля client_secret, что означает, что мне нужно поместить секрет приложения в сам код. Это не кажется безопасным для приложений Android/Java, которые могут быть легко изменены.

Есть ли альтернативы?

2 ответа

Решение

Почему бы не разместить код для выполнения этого на своем собственном сервере и не дать клиенту расширить токен посредством вызова вашего сервера?

Итак, вот что я обнаружил до сих пор о SDK для Android / iOS в отношении создания / расширения токенов.

Я нашел 2 метода для генерации токенов на стороне клиента с помощью SDK и 3 метода для расширения токенов.

Генерация:

1) Приложение Facebook. Создает токен SSO

2) Веб-браузер (iOS)/ веб-диалог (Android/BB). Создает токен SSO для iOS и токен не SSO для Android / BB

Все эти токены являются долгосрочными токенами.

Расширение:

1) iOS / Android приложение. В случае Android, только если пользователь вошел в приложение, в противном случае вызов привязанной службы никогда не возвращает ничего, даже ошибки. Не тестировал iOS для этого сценария.

2) auth.extendSSOAccessToken. Это конечная точка для старого API, который, насколько я могу судить, iOS SDK все еще использует, если официальное приложение отсутствует. Теперь, если вы используете эту конечную точку на токене, который не был создан с помощью SSO (всплывающее диалоговое окно Android), вы получите код ошибки 10 с сообщением о том, что токен не был сгенерирован с помощью SSO. Это может заставить вас заподозрить, что он может работать до тех пор, пока ваш токен генерируется через SSO. Ваше подозрение будет неверным, оно выдает код ошибки 100 с сообщением "Токен доступа для приложения Facebook не поставляется". Это делает этот метод совершенно бесполезным для Android, насколько я могу судить.

3) oauth / access_token. Это конечная точка, которую FB говорит нам использовать в своей дорожной карте. Конечно, этот метод a) предоставляет ваш APP_SECRET (который FB настоятельно рекомендует не делать) через декомпиляцию / распаковку apk и b) работает только для расширения краткосрочных токенов в долгосрочные токены. Поэтому, если вы начинаете с долгосрочного токена, который по умолчанию возвращается в Android / iOS, вам необходимо сначала создать краткосрочный токен, а затем расширить его с помощью этого метода на стороне клиента (небезопасно) или на стороне сервера (не для всех). Как генерировать краткосрочный токен из долгосрочного токена? Жаль, что я не знал =(.

До сих пор не удалось найти какие-либо идеи для достижения этой цели нигде. Если кто-то знает, пожалуйста, поделитесь!

Это, по крайней мере, даст людям с серверами безопасный способ продления долгосрочных токенов.

Другие вопросы по тегам