OAuth, что означает «открытая авторизация», — это стандартный протокол, который позволяет пользователям предоставлять ограниченный доступ к своим защищенным ресурсам на одном веб-сайте другому веб-сайту или приложению, не передавая свои учетные данные, например пароли. Проще говоря, OAuth позволяет пользователям входить в сторонние сервисы, используя существующие учетные данные с другого веб-сайта или приложения.
OAuth широко используется на различных платформах и приложениях, включая платформы социальных сетей, облачные сервисы и API. Он предоставляет разработчикам безопасный и стандартизированный способ интеграции своих приложений с внешними сервисами без ущерба для учетных данных пользователя. В протоколе участвуют несколько сторон: пользователь (владелец ресурса), веб-сайт или приложение, к которому пользователь хочет получить доступ (клиент), а также веб-сайт или служба, на которой размещены защищенные ресурсы пользователя (сервер ресурсов).
Вот несколько распространенных методов реализации OAuth с примерами кода:
- OAuth 2.0 с потоком кода авторизации:
Это наиболее часто используемый поток в OAuth 2.0. Он включает в себя следующие шаги:
Шаг 1. Пользователь инициирует запрос на авторизацию.
const authorizationUrl = 'https://example.com/oauth/authorize';
const clientId = 'your_client_id';
const redirectUri = 'https://yourapp.com/callback';
const authRequestUrl = `${authorizationUrl}?client_id=${clientId}&redirect_uri=${redirectUri}&response_type=code`;
Шаг 2. Пользователь предоставляет разрешение клиенту.
После того, как пользователь перенаправляется обратно в клиентское приложение, приложение обменивает код авторизации на токен доступа и токен обновления.
const tokenEndpoint = 'https://example.com/oauth/token';
const clientSecret = 'your_client_secret';
const code = 'authorization_code';
const grantType = 'authorization_code';
const tokenRequestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: `client_id=${clientId}&client_secret=${clientSecret}&code=${code}&grant_type=${grantType}&redirect_uri=${redirectUri}`,
};
fetch(tokenEndpoint, tokenRequestOptions)
.then(response => response.json())
.then(data => {
const accessToken = data.access_token;
const refreshToken = data.refresh_token;
// Use the access token to make authorized requests
});
- OAuth 2.0 с неявным потоком:
Этот поток подходит для клиентских веб-приложений или мобильных приложений, которые не могут безопасно хранить секреты клиента. Он включает в себя следующие шаги:
Шаг 1. Пользователь инициирует запрос на авторизацию.
const authorizationUrl = 'https://example.com/oauth/authorize';
const clientId = 'your_client_id';
const redirectUri = 'https://yourapp.com/callback';
const authRequestUrl = `${authorizationUrl}?client_id=${clientId}&redirect_uri=${redirectUri}&response_type=token`;
Шаг 2. Пользователь предоставляет разрешение клиенту.
После того, как пользователь перенаправляется обратно в клиентское приложение, токен доступа становится доступен во фрагменте URL-адреса.
const accessToken = window.location.hash.substr(1).split('&')[0].split('=')[1];
// Use the access token to make authorized requests
<старый старт="3">
OAuth 1.0a — это более старая версия OAuth, но она все еще используется некоторыми API. Он включает в себя ряд шагов, включая получение токена запроса, авторизацию пользователя и обмен токена запроса на токен доступа.
Из-за ограничений по объему я предоставил примеры кода только для потоков OAuth 2.0. Однако важно отметить, что реализации OAuth могут различаться в зависимости от конкретного сервиса или API, с которым вы работаете.