Что's право авторизации OAuth 2.0 для мобильного приложения
Я пытаюсь реализовать делегированные авторизации в веб-API для Андроид приложения с помощью OAuth 2.0. Согласно спецификации, неявный грант поток не поддерживает обновления, что означает, когда маркер доступа предоставляется на определенный срок, пользователь должен предоставить разрешения для приложения снова, как только истекает срок действия маркера или его отмены.
Я думаю, это хороший сценарий для некоторых JavaScript-код, выполняемый в браузере, как указано в спецификации. Я пытаюсь минимизировать время пользователь обязан предоставить разрешения для приложения, чтобы получить токен, так это выглядит, как поток кода авторизации является хорошим вариантом, так как поддерживает обновления.
Однако, этот поток, кажется, в значительной степени полагаться на веб-браузер для выполнения перенаправления. Мне интересно, если этот поток все-таки хороший вариант для мобильного приложения при использовании встроенного веб-браузера. Или я должен идти с неявным потоком ?
Уточнение: Мобильное Приложение = Приложение Как указано в других комментариях и через несколько интернет-источников, неявные кажется естественным, пригодный для мобильных приложений, однако лучшее решение не всегда четкие (а на самом деле подразумевается не рекомендуется по причинам, рассмотренным ниже). Родной Приложение, Что OAuth2 Лучшие Практики Какой бы подход вы выберете (есть несколько компромиссов, чтобы рассмотреть), вы должны обратить внимание на лучшие практики, описанные здесь для "родных" приложений с использованием OAuth2: https://tools.ietf.org/html/rfc8252 Рассмотрите следующие варианты Неявные Я должен использовать неявную? Цитата из п. 8.2. https://tools.ietf.org/html/rfc8252#section-8.2
К сожалению, я не'т думаю, что есть четкий ответ на этот вопрос. Однако, тут есть варианты, которые я'вэ определены:
Если это ОК, чтобы спросить у пользователя его/ее учетные данные, а затем использовать владелец ресурса пароль. Однако, это может оказаться невозможным по некоторым причинам, а именно
Удобство использования или политики безопасности запрещают включение пароль непосредственно в приложение
Процесс проверки подлинности возложена на внешнего поставщика удостоверений и должно выполняться посредством перенаправления HTTP на основе потока (например, OpenID, SAMLP или WS-Федерации)
При использовании браузера на основе расхода, а затем использовать потока кода авторизации. Здесь определение
параметр redirect_uri
является серьезной проблемой, для которой есть следующие варианты:Используйте метод, описанный в https://developers.google.com/accounts/docs/OAuth2InstalledApp, где-это параметр redirect_uri
(например,
урна теме:IETF:РГ:протокол OAuth:2.0:ооб`) сигналы конечную точку авторизации, чтобы показать код авторизации вместо перенаправления обратно в клиентское приложение. Пользователь может вручную скопируйте этот код или приложение, можете попробовать получить его из заголовка HTML-документа.Использовать локальным
localhost
сервера на устройства (руководство порта не может быть легким).Использовать пользовательские схемы URI (например,
приложение myapp://...
), что когда разыменовывается вызывает зарегистрированы на "проводник" и (подробности зависят от мобильной платформы).Если есть возможность, используйте специальные и"веб-представление" и, например, WebAuthenticationBroker на Windows 8, для контроля и доступа к HTTP-перенаправление ответов.
Надеюсь, что это помогает
Педро
ТЛ;ДР: используйте предоставления кода авторизации с Эпсилон
1. Неявный Тип Гранта
Неявный тип гранта является довольно популярным среди мобильных приложений. Но она не должна использоваться, как это. Есть соображения безопасности вокруг редирект. Джастин богаче государства:
И вместе с тем, что он не позволяет обновить маркер доступа, лучше избежать этого.
2. Тип Авторизации Предоставить Код
Предоставления кода авторизации требует ключ. Но вы не должны хранить конфиденциальные данные в исходный код мобильного приложения. Люди могут извлекать их. Чтобы не подвергать секрет клиента, вы должны запускать сервер в качестве посредника как Facebook пишет:
Не идеальное решение, но есть новый, лучший путь, чтобы сделать с OAuth на мобильных устройствах: основные доказательства для обмена код
3. Предоставления кода авторизации тип с-Эпсилон (ключевые доказательство для обмена кодом)
Из ограничений, новая методика была создана, которые позволяют использовать код авторизации без секрета клиента. Вы можете прочитать полный РЧЦ 7636 или это краткое введение.
от https://oauth.net/2/pkce/
Используя WebView в вашем мобильном приложении должен быть доступный способ реализовать что OAuth2.0 протокол на платформе Android.
Как для параметр redirect_uri поле, я думаю,
http://localhost
это хороший выбор, и вы Дон'т придется порт HTTP-сервер внутри вашего приложения, потому что вы можете переопределить реализациюonPageStarted
функцииWebViewClient класса и остановить загрузку веб-страницы с http://localhost после проверки
URL-адрес` параметр.Самый удобный для пользователя для проверки подлинности, и простым в реализации будет вставить WebView в приложение. Обработать ответы, полученные в WebView с точки аутентификации и выявления ошибок (отмена пользователем) или утверждения (и извлекать токен из параметров URL-запроса). И я думаю, что вы можете сделать это на всех платформах. Я успешно сделал это для: iOS, андроид, Мак, магазина Windows 8.1-приложения, приложения Windows 8.1. Я сделал это для следующие услуги: Dropbox, Google Диск, OneDrive, коробка, бейскемп. Для платформ, отличных от Windows, я был с использованием Xamarin, которые якобы не подвергайте всю конкретных API платформы, в то же время он достаточно выставить на этом. Так что это довольно доступное решение, даже с креста перспективной платформы, и вы Дон'т придется беспокоиться о пользовательском интерфейсе формы проверки подлинности.