Предоставление кода авторизации
-
Запрос на авторизацию
-
Сначала приложению необходимо определить, какие разрешения оно запрашивает, а затем перенаправить пользователя в браузер для получения этих разрешений. Чтобы запустить этот процесс авторизации, сформируйте URL-адрес, как показано ниже, и перенаправьте браузер конечного пользователя на этот URL-адрес:
ПОЛУЧИТЬ http://<wp_base_url>/wp-json/moserver/authorize
?response_type=code
&client_id= <client_id_goes_here>
&redirect_uri= <callback_url>
&scope= <permissions_requesting>
&state= <security_token>
response_type=code : Тип ожидаемого ответа. Для получения кода авторизации он должен иметь значение.
кодЭто сообщает серверу авторизации, что приложение инициирует процесс авторизации.
client_id : Идентификатор клиента, предоставленный поставщиком OAuth.
redirect_uri : URL-адрес обратного вызова, на который пользователь будет перенаправлен после того, как разрешит или запретит доступ к вашему приложению.
объем : Одна или несколько строк, разделённых пробелами, указывающих на запрашиваемое вашим приложением разрешение.
состояние : Приложение генерирует случайную строку и включает её в запрос. Затем оно должно проверить, возвращается ли то же значение после авторизации приложения пользователем.
Если пользователь разрешит доступ к вашему приложению, его браузер будет перенаправлен на указанный URL-адрес перенаправления, и запрос будет включать в себя следующее:
код и состояние параметры в строке запроса.
Например, пользователя можно перенаправить обратно на URL-адрес, такой как:
https://example-app.com/redirect
?code=<authorization-code>
&state=<security_token>
код Это код авторизации, который можно обменять на токен доступа. Он генерируется сервером авторизации и имеет относительно короткий срок действия.
состояние Это тот же токен безопасности, который приложение изначально установило в запросе.
Запрос токена
-
Если конечный пользователь предоставил вашему приложению доступ и вы получили код авторизации, вы можете обменять этот код на токен доступа, отправив POST-запрос на конечную точку токена.
- Ниже приведён пример POST-запроса:
POST http://<wp_base_url>/wp-json/moserver/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=<authorization_code>&
client_id=<client_id>&
client_secret=<clientSecret>&
redirect_uri=<redirect_uri>
Здесь приведено описание каждого параметра запроса.
-
grant_type=authorization_code : Тип предоставляемого вами гранта. Это указывает на то, что в приложении используется тип гранта — код авторизации.
-
код: Код авторизации, полученный на предыдущем шаге, прилагается здесь.
-
redirect_uri: Тот же URI, который был указан ранее в запросе на авторизацию.
-
client_id : Идентификатор клиента, предоставленный поставщиком OAuth.
-
client_secret : Секретный ключ клиента, предоставленный поставщиком OAuth.
На конечной точке получения токена будут проверены все параметры запроса, чтобы убедиться, что код не истек и идентификатор клиента и секретный ключ совпадают. В случае успешного выполнения запроса будет сгенерирован токен доступа, который будет возвращен в ответе.
HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store { "access_token":"hkjher92u9eu2u3uihi2eh9293", "token_type":"bearer", "expires_in":3600, "scope":"profile", "id_token":"" }
Здесь приведено описание каждого параметра, полученного в ответе.
-
access_token : токен доступа для конечной точки Userinfo.
-
token_type : Значение типа токена OAuth 2.0. Значение должно быть податель.
-
expires_in : Срок действия токена доступа.
-
объем: Одна или несколько строк, разделённых пробелами, указывающих на запрашиваемое вашим приложением разрешение.
-
id_token: Идентификационный токен (ID Token) — это токен безопасности, содержащий утверждения (Claims) об аутентификации конечного пользователя сервером авторизации при использовании клиента, а также, возможно, другие запрошенные утверждения.
Если запрос не удастся, ответ будет иметь следующий статус:
404 Bad Request и будет содержать следующее:
"error" : "invalid_request", "error_description" : "Более подробное описание ошибки, предназначенное для разработчика вашего приложения."
Запрос ресурса
-
Если запрос токена будет успешным, вы получите
access_token в ответе, который можно использовать для доступа к защищенным ресурсам через API.
-
Запрос информации о пользователе: Ниже приведён неформатирующий пример запроса Userinfo:
ПОЛУЧИТЬ http://<wp_base_url>/wp-json/moserver/resource
Host: server.example.com
Authorization: Bearer <access_token>
Сервер ресурсов проверяет и подтверждает токен доступа, а также убеждается, что он не истек. Если запрос к ресурсу действителен, сервер ресурсов возвращает утверждения, представленные в виде объекта JSON, содержащего набор пар «имя-значение» для утверждений.
Успешный ответ от Userinfo:
Объекты UserInfo Claims ДОЛЖНЫ быть возвращены в виде элементов объекта JSON.
Ниже приведен пример:
{ "id": "1", "username": "abc", "first_name": "xyz", "last_name": "example", "picture": "https://example.com/-kwtzesU/photo.jpg", "email": "abc@example.com", "locale": "en",... }
Предоставление неявного кода
-
Запрос на авторизацию
-
Сначала приложению необходимо определить, какие разрешения оно запрашивает, а затем перенаправить пользователя в браузер для получения этих разрешений. Чтобы инициировать этот неявный процесс, сформируйте URL-адрес, как показано ниже, и перенаправьте браузер конечного пользователя на этот URL-адрес:
Получите http://<wp_base_url>/wp-json/moserver/authorize
?response_type=token
&client_id= <client_id_goes_here>
&redirect_uri= <callback_url>
&scope= <permissions_requesting>
&state= <security_token>
response_type=token : Тип ожидаемого ответа. Это сообщает серверу авторизации, что приложение инициирует неявный поток. Обратите внимание на отличие от потока с кодом авторизации, где это значение установлено как code.
client_id : Идентификатор клиента, предоставленный поставщиком OAuth.
redirect_uri : URL-адрес обратного вызова, на который пользователь будет перенаправлен после того, как разрешит или запретит доступ к вашему приложению.
объем : Одна или несколько строк, разделённых пробелами, указывающих на запрашиваемое вашим приложением разрешение.
состояние : Приложение генерирует случайную строку и включает её в запрос. Затем оно должно проверить, возвращается ли то же значение после авторизации приложения пользователем.
Если пользователь разрешит доступ к вашему приложению, его браузер будет перенаправлен на указанный URL-адрес перенаправления, и запрос будет включать в себя следующее:
знак и состояние параметры в строке запроса.
Например, пользователя можно перенаправить обратно на URL-адрес обратного вызова, такой как:
https://callback-url?
#access_token=<access_token>
&token_type=Bearer
&expires_in=3600
&scope=<permissions_requesting>
Обратите внимание на два основных отличия этого подхода от подхода с кодом авторизации: в ответе возвращается токен доступа, а не код авторизации.
Затем клиент может использовать access_token для доступа к защищенным ресурсам с сервера ресурсов.
Здесь приведено описание каждого параметра, полученного в ответе.
-
access_token : токен доступа для конечной точки Userinfo.
-
token_type : Значение типа токена OAuth 2.0. Значение должно быть податель.
-
expires_in : Срок действия токена доступа.
-
объем: Одна или несколько строк, разделённых пробелами, указывающих на запрашиваемое вашим приложением разрешение.
Запрос ресурса
-
Конечная точка UserInfo — это защищенный ресурс OAuth 2.0, который возвращает утверждения о прошедшем аутентификацию конечном пользователе. Возвращаемые утверждения представлены в виде объекта JSON, содержащего коллекцию пар «имя-значение» для этих утверждений.
-
Запрос информации о пользователе: Ниже приведён неформатирующий пример запроса Userinfo:
ПОЛУЧИТЬ http://<wp_base_url>/wp-json/moserver/resource
Host: server.example.com
Authorization: Bearer <access_token>
Успешный ответ от Userinfo:
Объекты UserInfo Claims ДОЛЖНЫ быть возвращены в виде элементов объекта JSON.
Ниже приведен пример:
{ "id": "1", "username": "abc", "first_name": "xyz", "last_name": "example", "picture": "https://example.com/-kwtzesU/photo.jpg", "email": "abc@example.com", "locale": "en",... }
Предоставление пароля
-
Тип предоставления доступа «пароль владельца ресурса» (или «password») чаще всего используется в случаях, когда приложению доверяют очень высоко. В этой конфигурации пользователь предоставляет свои учетные данные сервера ресурсов (имя пользователя/пароль) клиентскому приложению, которое отправляет ему запрос на получение токена доступа.
-
Запрос токена
-
Предоставление пароля — один из простейших способов предоставления доступа по протоколу OAuth, включающий всего один шаг: приложение отображает традиционную форму входа с именем пользователя и паролем для сбора учетных данных пользователя и отправляет POST-запрос на сервер для обмена пароля на токен доступа. POST-запрос, отправляемый приложением, выглядит примерно так, как показано в примере ниже.
POST http://<wp_base_url>/wp-json/moserver/token
Host: authorization-server.com
Content-type: application/x-www-form-urlencoded
grant_type=password
&username=exampleuser
&password=12345678
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx
Параметры POST-запроса в этом запросе описаны ниже.
-
grant_type=password : Это сообщает серверу, что мы используем тип предоставления доступа Password.
-
имя пользователя = Имя пользователя, которое он ввел в приложение.
-
пароль = Пароль пользователя, который он ввел в приложение.
-
client_id= Публичный идентификатор приложения, полученный разработчиком при регистрации.
-
client_secret= Секретный ключ клиента, предоставленный поставщиком OAuth.
На конечной точке получения токена будут проверены все параметры запроса, чтобы убедиться, что код не истек и идентификатор клиента и секретный ключ совпадают. В случае успешного выполнения запроса будет сгенерирован токен доступа, который будет возвращен в ответе.
HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store { "access_token":"hkjher92u9eu2u3uihi2eh9293", "token_type":"bearer", "expires_in":3600, "scope":"profile", "id_token":"" }
Затем клиент может использовать access_token для доступа к защищенным ресурсам с сервера ресурсов.
Здесь приведено описание каждого параметра, полученного в ответе.
-
access_token : токен доступа для конечной точки Userinfo.
-
token_type : Значение типа токена OAuth 2.0. Значение должно быть податель.
-
expires_in : Срок действия токена доступа.
-
объем: Одна или несколько строк, разделённых пробелами, указывающих на запрашиваемое вашим приложением разрешение.
Запрос ресурса
-
Конечная точка UserInfo — это защищенный ресурс OAuth 2.0, который возвращает утверждения о прошедшем аутентификацию конечном пользователе. Возвращаемые утверждения представлены в виде объекта JSON, содержащего коллекцию пар «имя-значение» для этих утверждений.
-
Запрос информации о пользователе: Ниже приведён неформатирующий пример запроса Userinfo:
ПОЛУЧИТЬ http://<wp_base_url>/wp-json/moserver/resource
Host: server.example.com
Authorization: Bearer <access_token>
Успешный ответ от Userinfo:
Объекты UserInfo Claims ДОЛЖНЫ быть возвращены в виде элементов объекта JSON.
Ниже приведен пример:
{ "id": "1", "username": "abc", "first_name": "xyz", "last_name": "example", "picture": "https://example.com/-kwtzesU/photo.jpg", "email": "abc@example.com", "locale": "en",... }
Предоставление учетных данных клиента
-
Предоставление учетных данных клиента может использоваться для аутентификации между машинами. При таком предоставлении авторизация конкретного пользователя не производится, вместо этого проверяются учетные данные, и возвращается общий токен доступа.
-
Запрос токена
-
Для получения токена доступа клиент отправляет POST-запрос к API, используя значения идентификатора клиента и секретного ключа клиента, полученные от зарегистрированного приложения разработчика, следующим образом.
POST http://<wp_base_url>/wp-json/moserver/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&
client_id=<client_id>&
client_secret=<clientSecret>&
redirect_uri=<redirect_uri>&
scope=<permisssions_requested>
Параметры запроса:
- Параметры POST-запроса описаны ниже.
-
grant_type=client_credentials : Это сообщает серверу, что мы используем тип предоставления учетных данных клиента.
-
client_id= Общедоступный идентификатор приложения, полученный разработчиком в процессе регистрации.
-
client_secret: Секретный ключ клиента, предоставленный поставщиком OAuth.
-
redirect_uri : URL-адрес обратного вызова, на который пользователь будет перенаправлен после того, как разрешит или запретит доступ к вашему приложению.
-
объем : Одна или несколько строк, разделённых пробелами, указывающих на запрашиваемое вашим приложением разрешение.
Если учетные данные действительны, приложение получит в ответ подписанный JSON Web Token или токен доступа, тип токена (Bearer) и время его истечения в формате Unix.
Пример ответа
{ "access_token": , "expires_in": 600, "token_type": "Bearer" }
Элементы ответа:
-
access_token : токен доступа для конечной точки Userinfo.
- истекает Срок действия токена доступа.
-
token_type: Значение типа токена OAuth 2.0. Значение должно быть податель.
Запрос ресурса
- Предоставление учетных данных клиента не поддерживает Запрос ресурса.
Предоставление токенов обновления
-
Токен обновления позволяет приложению выдать новый токен доступа или идентификационный токен без необходимости повторной аутентификации пользователя. Это будет работать до тех пор, пока токен обновления не был отозван.
-
Запрос токена
-
В ответе на запрос токена должны содержаться токен доступа и токен обновления.
{ "access_token": "etMv23....429hiU32Hri", "refresh_token": "GEbRxBN...edjnXbL", "token_type": "Bearer" }
Используйте токен обновления:
Чтобы обменять полученный токен обновления на новый токен доступа, отправьте POST-запрос к конечной точке токена, используя
grant_type=refresh_token а именно:
POST http://<wp_base_url>/wp-json/moserver/token
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&
client_id=<client_id>&
client_secret=<client_secret>&
refresh_token=<refresh_token>
Здесь приведено описание каждого параметра запроса.
-
grant_type=refresh_token : Это сообщает серверу, что мы используем тип предоставления токена обновления.
-
client_id= Общедоступный идентификатор приложения, полученный разработчиком в процессе регистрации.
-
client_secret: Секретный ключ клиента, предоставленный поставщиком OAuth.
- refresh_token : Токен обновления для использования.
В ответ будет включен новый токен доступа, его тип, срок действия (в секундах) и предоставленные области действия. Если область действия исходного токена включала openid, то в ответе также будет новый токен идентификатора.
Ответ будет содержать следующие параметры:
{ "access_token": "eyJ...MoQ", "expires_in": 86400, "scope": , "id_token": "eyJ...0NE", "token_type": "Носитель" }
Отозвать токен обновления
-
Поскольку токены обновления никогда не истекают, крайне важно иметь возможность отозвать их в случае компрометации.
-
Для отзыва токена обновления можно отправить POST Запрос к конечной точке токена выглядит следующим образом.
POST http://<wp_base_url>/wp-json/moserver/token
Content-Type: application/x-www-form-urlencoded
client_id=<client_id>&
client_secret=<client_secret>&
refresh_token=<refresh_token>
Попробуйте!
Если вы не нашли то, что искали, свяжитесь с нами по адресу
info@miniorange.com
или позвоните нам по телефону +1 978 658 9387 чтобы найти ответ на ваш вопрос о сервере OAuth для WordPress.
Посмотрите видео, чтобы узнать больше.
Смотреть демо