Может ли Xamarin.Auth поддерживать поток кода авторизации с получением токена доступа на стороне сервера, а если нет, то почему? Что может?

Я видел много сообщений, в которых рекомендовалось использовать Xamarin.Auth для единого входа в Xamarin, но после просмотра руководство, а также GitHub Getting Started wiki (в котором говорится, что он поддерживает "поток кода авторизации", но, похоже, для получения кода аутентификации от клиента требуется секретный ключ, а это не то, что я ищу) и искал web безрезультатно для «неявного потока Xamarin.Auth» и «потока кода авторизации Xamarin.Auth», мне кажется, что Xamarin Auth поддерживает только неявный поток, который менее безопасен, чем поток кода авторизации для собственного приложения, подключенного к серверное веб-серверное приложение, как у меня. Правильно ли я понимаю, что Xamarin.Auth может поддерживать только неявный поток (требующий, чтобы токен доступа был отправлен клиенту, а client_secret не может быть сохранен на стороне сервера и отправлен на стороне сервера как часть извлечения токен доступа), а не поток кода авторизации (в котором клиент получит только код авторизации, который затем будет отправлен на сервер, который затем получит токен доступа с использованием секрета клиента и, возможно, обмена PKCE)?

Кроме того, даже потоки с другими библиотеками, которые я видел, рекомендуются для получения токена доступа к клиенту — AppAuth поддерживает PKCE, что является улучшением безопасности по сравнению с отсутствием PKCE, но сообщения, которые я вижу, показывают примеры этого здесь и здесь и здесь по-прежнему все получают токен доступа на клиенте. Auth0 также рекомендуется в некоторых сообщениях, которые я видел (например, здесь), но пример, который я вижу для этого здесь, также извлекает токен доступа на клиенте.

Есть ли причина, по которой сайты этого не делают? Есть ли образец или документация по API, на которую кто-нибудь может указать библиотеку, которая поддерживает получение только клиентского кода авторизации в приложении Xamarin? (и затем отдельно, на стороне сервера, используя это для получения токена доступа с использованием секрета клиента, не обязательно с той же библиотекой безопасности, поскольку это не обязательно должен быть код Xamarin - эта часть на стороне сервера, я уверен, является довольно стандартная вещь - например, как указано для Auth0 здесь)?


person user756366    schedule 02.03.2020    source источник


Ответы (1)


Xamarin.Auth поддерживает поток кода авторизации. Как вы найдете в учебное пособие, класс Xamarin.Auth OAuth2Authenticator имеет параметры, называемые «Client Secret», вместе с другими предоставленными параметрами, Xamarin.Auth способен обрабатывать часть обмена кодом авторизации и возвращать токен доступа напрямую обратно вам кажется, что этой части не было, но на самом деле это было.

Изучение OAuth2Authenticator исходный код, метод VerifyOAuth2FlowResponseType показывает, что Xamarin.Auth обеспечивает как поток кода авторизации, так и неявный поток. Для получения более подробной информации вы можете прочитать код вместе с Платформа авторизации OAuth 2.0

И здесь приведен пример потока кода авторизации со стороны клиента.

person Nicole Lu - MSFT    schedule 04.03.2020
comment
Благодарю вас! Насколько я понимаю, Xamrin.Auth поддерживает обмен кодом авторизации. Я не уверен, что он поддерживает обмен кодом авторизации, в котором 1) я не отправляю секрет клиента с моего мобильного устройства и 2) коду, который я пишу в обратном вызове, вызываемом на моем мобильном устройстве, предоставляется доступ к авторизации Код и 3) Токен доступа НЕ отправляется на мое мобильное устройство. В OAuth2Authenticator Этот комментарий к параметру токена доступа предполагает, что я не могу делать то, что хочу: // необязательный — требуется для предоставления кода авторизации (т. е. нет возможности использовать поток кода аутентификации без извлечения токена доступа?) - person user756366; 05.03.2020
comment
Боюсь, вы правы, Xamarin.Auth не предоставляет API для независимого процесса кода авторизации, см. github.com/xamarin/Xamarin.Auth/issues/416. Насколько я знаю, вы можете обратиться к HttpClient для отправки отдельных http-запросов, чтобы разбить процесс. Кроме того, если вам нужна помощь, Google предоставил некоторые собственные решения, которые соответствуют вашим требованиям: Developers.google.com/identity/sign-in/android/offline-access - person Nicole Lu - MSFT; 05.03.2020