Авторизуйте клиента с помощью PKCE
Реализуйте поток авторизации ShareAI с использованием S256 PKCE, проверьте состояние и обменяйте код на серверной части вашего приложения.
На этой странице
Этот поток подключает одну учетную запись клиента к вашему приложению. Клиент входит в систему, выбирает личную или организационную учетную запись и одобряет запрашиваемые разрешения. Затем ваша серверная часть обменивает краткосрочный код на токены.
Перед началом#
Завершить регистрацию приложения. Вам нужен точно зарегистрированный обратный вызов, учетные данные клиента, хранящиеся на сервере, и серверная сессия для браузера, завершающего авторизацию.
1. Создайте запрос авторизации#
https://auth.shareai.now/oauth/authorizeПопросите клиента авторизовать приложение.
- Базовый URL
https://auth.shareai.now- Аутентификация
- Перенаправление браузера; зарегистрированное приложение
Генерируйте новый проверяющий элемент, состояние и nonce для каждой попытки. Сохраните их в серверной сессии инициирующего пользователя. Отправьте SHA-256 вызов, но не проверяющий элемент, в перенаправлении браузера. Запрашивайте только те области, которые нужны вашему приложению.
Python
import base64
import hashlib
import secrets
import urllib.parse
verifier = secrets.token_urlsafe(48)
challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest()).rstrip(b"=").decode()
state = secrets.token_urlsafe(32)
nonce = secrets.token_urlsafe(32)
# Store verifier, state and nonce in the user's server-side session.
params = {
"response_type": "code",
"client_id": "YOUR_CLIENT_ID",
"redirect_uri": "https://app.example.com/auth/shareai/callback",
"scope": "openid profile surcharge",
"state": state,
"nonce": nonce,
"code_challenge": challenge,
"code_challenge_method": "S256",
}
print("https://auth.shareai.now/oauth/authorize?" + urllib.parse.urlencode(params))
TypeScript
import { randomBytes, createHash } from "node:crypto";
const verifier = randomBytes(48).toString("base64url");
const state = randomBytes(32).toString("base64url");
const nonce = randomBytes(32).toString("base64url");
const challenge = createHash("sha256").update(verifier).digest("base64url");
// Save verifier, state and nonce in the initiating server-side session.
const params = new URLSearchParams({ response_type: "code", client_id: "YOUR_CLIENT_ID",
redirect_uri: "https://app.example.com/auth/shareai/callback",
scope: "openid profile surcharge", state, nonce,
code_challenge: challenge, code_challenge_method: "S256" });
const authorizationUrl = `https://auth.shareai.now/oauth/authorize?${params}`;
// Redirect the browser to authorizationUrl.
2. Проверьте обратный вызов#
Если авторизация отклонена, обработайте ошибку OAuth как обычную отмену. В противном случае сравните возвращенное state со сохраненным значением перед использованием кода. Отклоните отсутствующее или несоответствующее состояние. Используйте сохраненное состояние только один раз; не принимайте URL-адреса обратного вызова, отправленные другой сессией браузера.
3. Обменяйте код#
https://auth.shareai.now/oauth/tokenОбменяйте одноразовый код и соответствующий проверяющий элемент PKCE.
- Базовый URL
https://auth.shareai.now- Аутентификация
- Аутентификация конфиденциального клиента
cURL
curl --fail-with-body "https://auth.shareai.now/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=authorization_code" \
--data-urlencode "client_id=$SHAREAI_CLIENT_ID" \
--data-urlencode "client_secret=$SHAREAI_CLIENT_SECRET" \
--data-urlencode "code=$AUTHORIZATION_CODE" \
--data-urlencode "redirect_uri=https://app.example.com/auth/shareai/callback" \
--data-urlencode "code_verifier=$PKCE_VERIFIER"
Используйте метод аутентификации клиента, настроенный для клиента. В примере используется аутентификация клиента на основе формы. Не отправляйте один и тот же код дважды; начните авторизацию заново после использования или истечения срока действия кода.
4. Сохраните результат и установите сессию вашего приложения#
Сохраните токены доступа и обновления на серверной части. Используйте возвращенное expires_in вместо предположения о постоянном токене. Если вы используете ID токен, проверьте его подпись с помощью JWKS издателя, ожидаемого издателя, аудитории клиента, срока действия и вашего оригинального nonce перед доверием к утверждениям.
Продолжите жизненный цикл#
Обновление и ротация · Области и идентичность учетной записи · Запросы чата OAuth
Последнее обновление Сентябрь 15, 2026