Oauth2 — ошибка 400: redirect_uri_mismatch

Внешний интерфейс

  • Реакция: 16.8.3, версия 2.1.5
  • response-google-login: 5.0.2

Поток «Код» (специально для Google OAuth2)

Описание: React → запросить «код» социальной авторизации → запросить токен jwt для получения статуса «логин» с точки зрения вашего собственного внутреннего сервера/базы данных.

  1. Frontend (React) использует «кнопку входа Google» с для получения кода авторизации. (это не токен, не токен доступа!)
    • Кнопка входа в указана выше как .
    • Нажатие на кнопку откроет всплывающее окно для пользователя, чтобы выбрать учетную запись. После того, как пользователь выберет один и окно закроется, вы получите код из функции обратного вызова кнопки.
  2. Интерфейс отправляет это на конечную точку JWT внутреннего сервера.
  3. Для моего сервера Django я использую Django REST Framework JWT + Django REST Social Auth. Django получает код от внешнего интерфейса, проверьте его с помощью сервиса Google (сделано для вас). После проверки он отправит JWT (токен) обратно во внешний интерфейс. Теперь интерфейс может собрать токен и хранить его где-нибудь.
  4. Django REST Social Auth управляет созданием аккаунта. Это означает, что он проверит адрес электронной почты/фамилию учетной записи Google и выяснит, соответствует ли она какой-либо учетной записи в базе данных. Если нет, он создаст его для вас, используя точную электронную почту и фамилию. Но имя пользователя будет выглядеть как если ваш адрес электронной почты — . Он добавляет некоторую случайную строку для создания уникального имени пользователя. Это поведение по умолчанию, я считаю, что вы можете настроить его и свободно копаться в их документации.
  5. Внешний интерфейс хранит этот токен, и когда он должен выполнить CRUD для внутреннего сервера, особенно создать/удалить/обновить, если вы присоедините токен в заголовке и отправите запрос к внутреннему интерфейсу, серверная часть Django теперь распознает его как имя входа, т.е. аутентифицированный пользователь. Конечно, если ваш токен истекает, вы должны обновить его, сделав еще один запрос.

О, боже мой, я потратил более 6 часов и наконец понял это правильно! Я полагаю, что это первый раз, когда я увидел это . Любой, кто работает над комбинацией , обязательно столкнется с этим. Я не могу поверить, что ни одна из статей там не упоминает об этом, кроме ответов здесь. Но я очень надеюсь, что этот пост сэкономит вам массу времени, если вы используете стек Django + React.

OAuth2 service accounts

This section discusses how to access the AdWords API with service accounts.

A service account is an account that belongs to your application instead of
to an individual end user. Service accounts allow server-to-server interactions
between a web application and a Google service. Your application calls Google
APIs on behalf of the service account, so users aren’t directly involved.

The AdWords API allows service account access through
G Suite domains.

Service accounts employ an OAuth2 flow that doesn’t require human authorization,
but uses instead a key file that only your app can access.

Using service accounts provides two key benefits:

  • Authorization for an app to access a Google API is done as a
    configuration step, avoiding the complications associated with other
    OAuth2 flows that require user intervention, or that require your
    app to cache tokens to avoid user intervention.
  • OAuth2 assertion flow allows your app to impersonate
    other users if necessary.

An alternative to service accounts

Developers often consider using service accounts because they want
programmatic access to the API using OAuth2 without user intervention.

Because of the complexity of setting up service account access for the AdWords API,
we recommend a simpler alternative that achieves the same goal,
which is to use the and persist
the refresh token. This way, your app will always be able to request a new access token when
necessary.

This process requires you to authorize your app during by configuring your client library
according to the
outlined above. This only needs to be done once, since Google OAuth2
refresh tokens don’t expire.

Prerequisites

  • A G Suite domain
    that you own such as mydomain.com or mybusiness.com.
  • An AdWords API developer token and optionally a test account.
  • The client library
    for the language you’re using.

Setting up service account access

First you must generate a service account key in the Google API Console:

  1. While logged in to your G Suite account, open the
    Google API Console.

  2. Click Select a project at the top of the screen, then NEW PROJECT.
    Supply the requested information and click Create. After a moment, the
    new project becomes the active project.

  3. From the menu in the upper left corner, choose IAM & admin, then select
    Service accounts.

  4. Click Create service account at the top.

  5. Enter a name for the service account.

  6. Check Furnish a new private key, and select JSON as the key type.

  7. Click Create. The JSON key file is downloaded to your machine. Store it
    in a safe place that only you can access.

  8. The new service account is shown on the Service Accounts page for the
    project.

Security concerns

Because of G Suite’s domain-level control, it’s important to protect the key
file that allows a service account to access the Google services for which it’s
authorized. This is especially true since that service account will have the
ability to impersonate any user in the domain.

Another good practice is to allow service accounts to access only one Google
API each (using the scope field described in the following section). This
is a preemptive measure to limit the amount of data an attacker can access if
the service account’s key file
is compromised.

Granting impersonation abilities

Perform the following steps to grant impersonation abilities to a service
account:

  1. Add a new authorized API client to your G Suite domain by going
    to:

  2. Add a new authorized API client as the Client Name, using the client
    ID from the JSON file you generated in the .

  3. Enter the following for the API scope:

  4. Repeat the process for all other service accounts to which you want to grant
    impersonation power.

You can now use the service account to access your Google Ads account via the
OAuth2 assertion flow.

Select your language below for instructions to configure your client library.

Generate OAuth2 credentials

Perform the following steps to generate OAuth2 credentials.

Determine your app type

First, determine the appropriate app type for the app you want to build.
There are two app type options for the AdWords API:

  • Installed application (recommended)
  • Web application

Check the table below to see which type is most appropriate for the app you want to build:

Choose this app type If …
Installed app (recommended)
  • You are managing all of your Google Ads accounts using a single top level manager account.
  • You’re a first-time user, or want to get started quickly with the simplest setup.
  • Your app will manage the same set of Google Ads accounts, with multiple users.
Web app
  • You want to authenticate as any user who grants permission to your app to access their Google Ads account data.
  • You want to easily generate multiple authorization credentials, to manage, for example, third party accounts.
  • Your app requires callback URLs. Callback URLs are not supported in the installed app flow.

For more details see the Google Identity Platform OAuth documentation for installed apps
and web apps.

Create a client ID and client secret

Once you’ve determined your app type, click the corresponding tab below and follow the
instructions to generate the OAuth2 client ID and client secret:

Configure and use a client library

Follow the appropriate guide below to use the OAuth2 credentials in the
configuration for your language’s client library:

2 ответа

Лучший ответ

Причина ошибки, которую вы получаете, заключается в том, что говорит:

г . Выберите вкладку «Учетные данные», нажмите кнопку «Создать учетные данные» и выберите «Идентификатор клиента OAuth».

e . Выберите тип приложения Другое , введите название «Gmail API Quickstart» и нажмите кнопку «Создать».

Однако, глядя на то, что вы делаете, вы используете веб-приложение вместо Другое .

Когда я использовал Другое как client_secret.json, я не столкнулся с этой проблемой.

результат :

Никаких хаков / обходных путей не требуется. Просто следуйте инструкциям :)

4

noogui
29 Мар 2018 в 11:31

Объяснение

Это происходит потому, что параметр uri_redirect , передаваемый на сервер Google API, представляет собой строку ASCII с процентной кодировкой. В этом можно убедиться, просмотрев URL-адрес, запущенный скриптом:

Весь URL-адрес кодируется сценарием быстрого запуска на этапах, следующих за выполнением этой строки:

Пошаговое выполнение процесса с помощью отладчика показывает, что URL-адрес в конечном итоге закодирован с помощью из библиотеки urllib Python. Это приводит к преобразованию параметра redirect_uri из файла client_secret.json из:

Чтобы

Когда Google получает запрос OAuth, он сравнивает закодированный параметр uri_redirect с некодированным параметром, зарегистрированным в консоли API. Поскольку они не совпадают, возвращается redirect_uri_mismatch.

Решение

В идеале Google следует изменить конечную точку API, чтобы при необходимости обеспечить декодирование этого параметра, прежде чем сравнивать его с тем, что зарегистрировано в консоли API.

Приемлемым исправлением было бы, если бы консоль API принимала закодированные записи URI перенаправления, но это не так:

Временное решение (предупреждение: хакерский)

Просто замените закодированный параметр redirect_uri в двух местах библиотеки oauth2client:

(1) функция update_query_params в _helpers.py

(2) step2_exchange в client.py а>

Теперь все работает.

kashiB
29 Мар 2018 в 04:07

Внешний интерфейс

  • React : 16.8.3, версия 2.1.5
  • react-google-login : 5.0.2

Поток «кода» (особенно для Google OAuth2)

Резюме: React -> запросить «код» социальной аутентификации -> запросить токен jwt для получения статуса «входа в систему» ​​с точки зрения вашего собственного внутреннего сервера / базы данных.

  1. Frontend (React) использует «кнопку входа в Google» с для получения кода авторизации. (это не токен, не токен доступа!)
    • Кнопка входа в Google взята из упомянутого выше .
    • При нажатии на кнопку открывается всплывающее окно, в котором пользователь может выбрать учетную запись. После того, как пользователь выберет один и окно закроется, вы получите код функции обратного вызова кнопки.
  2. Фронтенд отправляет это на конечную точку JWT внутреннего сервера.
  3. Для своего сервера Django я использую Django REST Framework JWT + Django REST Social Auth. Django получает код из внешнего интерфейса, проверьте его с помощью службы Google (сделано за вас). После проверки он отправит JWT (токен) обратно во внешний интерфейс. Теперь клиентский интерфейс может собирать токен и где-то хранить его.
  4. Социальная аутентификация Django REST обрабатывает создание учетной записи. Это означает, что он проверит адрес электронной почты / фамилию учетной записи Google и увидит, соответствует ли она какой-либо учетной записи в базе данных. Если нет, он создаст его для вас, используя точный адрес электронной почты и имя. Но имя пользователя будет примерно таким, как , если ваш адрес электронной почты . Он добавляет некоторую случайную строку, чтобы сделать уникальное имя пользователя. Это поведение по умолчанию, я считаю, что вы можете настроить его и не стесняйтесь копаться в их документации.
  5. Интерфейс хранит этот токен, и когда он должен выполнить CRUD на внутреннем сервере, особенно создать / удалить / обновить, если вы прикрепите токен в заголовке и отправите запрос на серверную часть, серверная часть Django теперь распознает это как логин, т.е. аутентифицированный пользователь. Конечно, если срок действия вашего токена истечет, вам придется обновить его, сделав еще один запрос.

О боже, я потратил больше 6 часов и наконец понял это правильно! Кажется, я впервые вижу эту вещь. Любой, кто работает над комбинацией , обязательно столкнется с этим. Я не могу поверить, что ни одна из статей не упоминает об этом, кроме ответов здесь. Но я очень надеюсь, что этот пост поможет вам сэкономить массу времени, если вы используете стек Django + React.

Поддерживаемые схемы

HTTPS: схема HTTPS () поддерживается для всех URI перенаправления на базе протокола HTTP.

HTTP: схема HTTP () поддерживается только для URI перенаправления localhost и используется исключительно на этапах локальной разработки и тестирования приложения.

Пример URI перенаправления Срок действия
Допустимо
Допустимо
Допустимо
Недопустимо
Допустимо
Допустимо

Исключения для localhost

В соответствии с разделами RFC 8252 и , для URI перенаправления с замыканием на себя (localhost) действуют два особых правила:

  1. Схемы URI допустимы, поскольку перенаправление никогда не покидает устройство. Таким образом, приемлемыми являются оба этих URI:
  2. Из-за временного характера диапазонов портов, часто используемых собственными приложениями, компонент порта (например, или ) при сопоставлении URI перенаправления игнорируется. В результате все эти URI считаются эквивалентными:

С точки зрения разработки это означает несколько моментов:

Не регистрируйте несколько URI перенаправления, если в них различается только порт

Сервер входа будет произвольным образом выбирать один из них и использовать связанные с этим URI параметры (например, в зависимости от того, относится ли это перенаправление к типу , , или ).
Это особенно важно, если вы планируете использовать в одном зарегистрированном приложении разные потоки проверки подлинности (например, и выдачу кода авторизации, и неявный поток). Чтобы связать с каждым URI перенаправления правильные параметры ответа, сервер входа должен иметь возможность различать эти URI, что невозможно, если различается только порт.

Чтобы зарегистрировать несколько URI перенаправления по адресу localhost для тестирования различных потоков в процессе разработки, используйте для них разный компонент пути

Например, не эквивалентно .

IPv6-адрес замыкания на себя () в настоящее время не поддерживается.

Выбор 127.0.0.1 вместо localhost

Чтобы работу приложения не нарушали неправильно настроенные брандмауэры или переименованные сетевые интерфейсы, используйте в URI перенаправления IP-адрес замыкания на себя в виде вместо . Например, .

При этом текстовое поле URI перенаправления на портал Azure нельзя использовать для добавления URI замыкания на себя со схемой :

Чтобы добавить URI перенаправления, использующий схему с -адресом замыкания на себя, в настоящее время необходимо изменить атрибут .

Как проверить код ответа сервера

Посмотреть код ответа на странице можно бесплатно за пару кликов. В браузере информация находится на панели разработчика: в Google Chrome для вызовите панель горячей клавишей F12, откройте вкладку Network и обновите страницу.

Результаты просмотра кода в браузере

Для просмотра кода есть браузерные расширения:
HTTP Headers для Google Chrome, HTTP Header для Opera.

Инструмент в Яндекс.Вебмастере покажет код статуса HTTP.

Результаты проверки инструментом

Инструмент
проверки заголовков сервера от PR-CY определит HTTP статусы сайта и доменного имени.

Результаты проверки инструментом

4 ответа

Лучший ответ

Когда ваш браузер перенаправляет пользователя на страницу oAuth Google, вы передаете в качестве параметра URI перенаправления, на который сервер Google должен возвращаться с ответом токена? Установка URI перенаправления в консоли — это не способ сообщить Google, куда идти при попытке входа в систему, а скорее способ сообщить Google, какие разрешенные URI перенаправления (так что если кто-то другой напишет веб-приложение с вашим клиентом ID, но другой URI перенаправления будет запрещен); ваше веб-приложение должно, когда кто-то нажимает кнопку «Войти», отправлять браузер по адресу:

(URI обратного вызова, переданный в качестве параметра, должен быть закодирован по URL-адресу, кстати).

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

Если вы посетите:

Здесь вы можете увидеть лучшие образцы java-клиента, демонстрирующие, что вам нужно переопределить метод , чтобы указать путь обратного вызова, чтобы значение по умолчанию не использовалось.

URI перенаправления находятся в файле по нескольким причинам … одна большая — чтобы поток oAuth мог проверить, что перенаправление, указанное вашим приложением, совпадает с тем, что позволяет ваше приложение.

Если вы посетите https://developers.google.com/api- client-library / java / apis / youtube / v3 Вы можете создать для себя образец приложения, основанное непосредственно на вашем приложении в консоли, в котором (опять же) метод getRedirectUri перезаписывается для использования ваших конкретных обратных вызовов.

42

Shashanth
19 Июл 2016 в 10:12

Я думал, что у меня это настроено, но оказалось, что я установил URL-адрес не в том месте. Я перешел по URL-адресу, указанному на странице ошибки Google, и добавил сюда свой URL. Глупая ошибка с моей стороны, но легко сделанная. Надеюсь это поможет

ben_mj
21 Сен 2019 в 16:47

Вам нужно зайти в консоль разработчика и установить

В качестве URL-адреса обратного вызова.

Это видео немного устарело, как видно из более старых версий разработчика. Однако консоль вместо новой, концепции все равно должны применяться. Вам необходимо найти свой проект в консоли разработчика и зарегистрировать URL-адрес обратного вызова.

4

Ikai Lan
25 Мар 2014 в 15:25

Думаю, я столкнулся с той же проблемой, что и вы. Я решил эту проблему, выполнив следующие шаги :

1) Перейдите в консоль разработчика Google.

2) Задайте происхождение JavaScript:

http://localhost

3) Установите URI перенаправления:

61

smholloway
26 Дек 2015 в 20:34

Microsoft Azure

Провайдер Microsoft Azure Active Directory может быть использован в качестве сервиса аутентификации в том случае, если вы используете сервисно-ориентированный подход к построению ландшафта окружения офиса. В данном случае все сервисы администрирования и управления как доменной авторизации, так и управление пользователями, располагаются на площадке Microsoft Azure. Технология доступна только для корпоративной учетной записи Microsoft. Бесплатная версия не поддерживается.

Процесс регистрации учетной записи Microsoft Azure не рассматривается в рамках данной статьи.

3.1. Настройка Azure Active Directory (Azure AD)

Обязательным условием для провайдера маркеров доступа Microsoft Azure AD является настроенный Azure Active Directory. Если в вашей учетной записи уже настроен Azure AD, данный раздел можно пропустить. Для настройки необходимо перейти на страницу портала https://portal.azure.com и нажать ссылку «Create a resource».

В окне мастера добавления ресурсов необходимо найти или выбрать в списке Azure Active Directory.

  

На следующем шаге с описанием ресурса нажмите кнопку «Create».

  

На заключительном шаге регистрации Azure AD необходимо заполнить следующие поля:

  • Название организации;
  • Наименование домена;
  • Регион

По факту заполнения полей нажмите кнопку «Create».

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

Для быстрого перехода к настройке Azure AD нажмите на ссылку «Here» информационного сообщения.

3.2. Регистрация приложения провайдера маркеров доступа Azure AD

В окне обзора Azure AD выберите раздел «App registrations»

В открывшемся окне со списком зарегистрированных приложений необходимо создать новое с помощью управляющей ссылки «New registration»

В окне регистрации приложения, заполните следующие значения (на изображении поля выделены красной рамкой) и нажмите кнопку «Register»:

  • Отображаемое имя приложения в списке;
  • Поддерживаемые типы учетных записей – Accounts in this organizational directory only (oidc only – Single tenant);
  • URI начальной страницы публикации —  адрес страницы публикации информационной базы строится про принципу: http(s)://имя домена/имя публикации/authform.html.

После регистрации приложения необходимо открыть форму настроек Authentication. В этой форме нужно включить использование следующих настроек:

  • Access tokens (used for implicit flows)
  • ID tokens (used for implicit and hybrid flows)

Процесс настройки приложения провайдера маркеров доступа завершен. При переходе к обзору созданного приложения скопируйте следующие поля, которые потребуются для настроек Open ID Connect подключения системы 1С:Предприятие:

  • Application (client) ID – идентификатор клиента провайдера.
  • Directory (tenant) ID – идентификатор клиента Azure ID (tenant).

3.3. Пример настройки OpendID Connect с помощью провайдера маркеров доступа Azure AD

<openidconnect>

    <providers>

        <![CDATA[

            {/p>

                «name»: «adfs_oidc»,

                «title»: «OIDC 1C (ADFS)»,

                «discovery»: «https://login.microsoftonline.com/<tenant>/v2.0/.well-known/openid-configuration»,

                «authenticationClaimName»: «upn»,

                «clientconfig»: {

                «authority»: «https://login.microsoftonline.com/<tenant>/oauth2»,

                «client_id»: «<client-id>»,

                «redirect_uri»: «http://<web-server-name>/<publication-name>/authform.html»,

                    «scope»: «openid»,

                    «response_type»: «id_token token»,

                    «filterProtocolClaims»: false,

                    «loadUserInfo»: false,

                    “resource”: «<client-id>»

                }

            }

        ]]]>

    </providers>

    <allowStandardAuthentication>true</allowStandardAuthentication>

</openidconnect>

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

  • <tenant> — идентификатор клиента Azure Active Directory;
  • <client-id> — идентификатор клиента группы приложений, который был указан при регистрации в консоли управления AD FS
  • <web-server-name> — имя сервера, на котором выполнена публикация информационной базы на веб сервере
  • <publication-name> — имя публикации информационной базы.

По факту заполнения правильных данных необходимо сохранить файл и попробовать снова запустить один из клиентов 1С:Предприятия. Вместо окна авторизации откроется окно выбора провайдера с возможность входа с помощью логина и пароля, указанного для провайдера.

Дополнительные параметры для авторизации клиента:

authenticationClaimName – имя поля, которое можно использовать в качестве идентификатора пользователя в ответе запроса к провайдеру. Доступные поля можно посмотреть в браузере по адресу https://login.microsoftonline.com//oauth2, в разделе «claims_supported»;

 

License

Copyright (c) 2018 by Josh Ellithorpe

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the «Software»), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Последствия нехватки безопасности API

Почему даже API-интерфейсы нуждаются в аутентификации? Для API, которые предназначены только для чтения, иногда пользователям не нужны ключи. Но большинство коммерческих API требуют авторизации в виде ключей API или других методов. Если нет никакой защиты API, пользователи могут совершать неограниченное количество запросов API без какой-либо регистрации. Разрешение неограниченных запросов усложнит модель дохода для вашего API.

Вдобавок, без аутентификации не было бы простого способа связать запросы с конкретными данными пользователя. И не было бы способа защиты от запросов от злонамеренных пользователей, которые могут удалить данные другого пользователя (например, путем удаления запросов DELETE для учетной записи другого пользователя).

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

В целом, аутентификация и авторизация с помощью API служат следующим целям:

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

OAuth2 internals

Our client libraries automatically take
care of the details covered below, so read on only if you’re interested in
what’s happening behind the scenes, or if you’re not using one of our
client libraries.

This section is intended for advanced users who are already familiar
with the OAuth 2.0 specification and
know how to use OAuth2 with Google APIs.

Scope

A single access token can grant varying degrees of access to multiple APIs. A
variable parameter called controls the set of resources and operations
that an access token permits. During the access token request, your app
sends one or more values in the parameter.

The present and deprecated scopes for the AdWords API:

Scope Meaning
Read/write access to AdWords API.
This scope is deprecated and should no longer be used to obtain future authorizations.
Previously authorized tokens will continue to work.

Offline access

It’s common for an AdWords API client app to request offline access.
For example, your app may want to run batch jobs when
your user is not physically online browsing your website.

To request offline access for a web application type, make sure you set the
parameter to . You can find additional information in
.

For installed application type, offline access is enabled by default — you
don’t have to explicitly request it.

The HTTP header in every request to the AdWords API server must include the
in this form:

For example:

Access and refresh token

In most cases, you need to store the refresh token securely for future use.
To learn more about how to request access and refresh tokens, read the guide corresponding to your
application type:

  • Installed application (recommended)
  • Web application with a web flow

Access token expiration

An access token has an expiration time (based on the
value) after
which the token is no longer valid. You can use the refresh token to refresh
an expired access token. By default, our client libraries automatically
refresh expired access tokens.

Коды редиректов

Класс кодов показывает, что для успешного выполнения запроса клиенту нужно совершить переход, то есть редирект.

300 Multiple Choices

Робот не может проиндексировать страницу, поскольку не может сопоставить ресурс и URL. Частая причина — ресурс перемещен на другой адрес. Сервер предлагает клиенту выбор альтернатив для перехода. Для успешной индексации нужно либо правильно указать ресурс, либо поправить заголовки.

301 Moved Permanently

Если у проиндексированной страницы изменился адрес, то со старого URL на новый настраивают 301 редирект. Код ответа показывает, что запрашиваемый документ был навсегда перенесен на другой URL, куда пользователя перенаправляет ссылка. Робот проиндексирует страницу, на которую ведет редирект, и склеит исходный адрес и новый.

302 Found

Код означает не постоянное, а временное перемещение страницы на другой адрес, поэтому страницу удалять из индекса не нужно. В ответе указано новое расположение данных.

Страница остается в индексе, ссылочный вес продолжает передаваться.

303 See Other

Сервер сигнализирует, что ресурс, который указан в запросе, расположен на другом адресе. Обычно он используется для перенаправления пользователя к выбранному ресурсу выводом данных POST-активированного скрипта.

В ответе сервера будет указан адрес, по которому нужно искать результат, удовлетворяющий запрос.

304 Not Modified

Код рекомендуется выдавать, если страница не менялась с момента ее последнего посещения роботом. Сервер дает сигнал об этом боту, бот получает от документа http-заголовки, не загружая страницу повторно, из-за чего индексирование проходит быстрее и уменьшается нагрузка на сервер.

305 Use Proxy

Код ответа связан с безопасностью данных. Сервер выдает код 305, если доступ к ресурсу, который запрашивает клиент, возможен только с прокси. Прокси указан там же в ответе сервера.

307 Temporary Redirect

Код 307 похож на 302, но дает более конкретный ответ. Код означает, что ресурс, который требует клиент, на время переведен на другой адрес, а новый URL нужно прописать в Location.

1 ответ

Лучший ответ

«Действительные URI перенаправления OAuth» можно настроить в «Мои приложения»> {ваше приложение}> «Вход в Facebook»> «Настройки».

» Действительные URI перенаправления OAuth «, который я буду называть только , используется, когда вы Создайте процесс входа вручную .

В этом случае — это URL-адрес, на который ваш веб-пользователь перенаправляется после входа в систему.

Facebook отправляет и в качестве параметров URL при перенаправлении на .

На на вашем http-сервере у вас должен быть программный код, который проверяет и использует для получения .

1. Ваша страница входа в систему

На вашей веб-странице (например, ) у вас есть следующая ссылка для входа:

— это ваш идентификатор приложения Facebook.

— это ваш , и он должен соответствовать тому, что вы настроили в «Действительных URI перенаправления OAuth».

— это ваше пользовательское состояние или тип идентификатора сеанса, который вы можете использовать, чтобы убедиться, что обратный вызов инициирован со страницы входа. Facebook: «Строковое значение, созданное вашим приложением для поддержания состояния между запросом и обратным вызовом».

2. Окно входа в Facebook

Когда пользователь нажимает «Войти», появляется окно входа в Facebook, и он / она вводит свое имя пользователя и пароль. После этого при успешном входе в систему пользователь перенаправляется на

5. Получите access_token.

На вашем сервере вам нужно сделать еще один запрос GET, чтобы получить access_token. Это вызов с сервера на сервер , поэтому вы можете включить свой

ВНИМАНИЕ : никогда не включайте в код на стороне клиента!

Ответ такой:

Заключение

В этой статье мы рассмотрели некоторые из лучших практик обработки ошибок REST API, в том числе:

  • Предоставление конкретных кодов состояния
  • Включение дополнительной информации в органы реагирования
  • Единообразная обработка исключений

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

Это не только позволяет клиентам последовательно обрабатывать ошибки, но и упрощает код, который мы создаем при реализации REST API.

Код, на который ссылается эта статья, доступен на GitHub .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: