Авторизация по протоколу OAuth 2.0
Сервис $http
позволяет выполнять HTTP-запросы с авторизацией по протоколу OAuth 2.0.
Для интеграции с наиболее распространенными сервисами, которые требуют авторизации OAuth 2.0, рекомендуется вместо $http
использовать встроенный сервис $integration
.
Синтаксис
Чтобы включить авторизацию по протоколу OAuth 2.0, добавьте в настройки метода $http.query
или $http.config
поле oauth2ResourceDetail
.
Это должен быть объект с полями:
-
grantType
— тип авторизации.предупреждениеJAICP поддерживает только типы, которые не требуют от пользователя переходить на сторонний сервис авторизации. Например, поддерживается
client_credentials
, но не поддерживаетсяauthorization_code
. -
accessTokenUrl
— URL, на который JAICP будет отправлять запросы на предоставление и обновление ключей. -
clientId
— идентификатор клиента. Его предоставляет сервер авторизации при регистрации приложения. -
clientSecret
— секретный ключ клиента. Его предоставляет сервер авторизации при регистрации приложения.
В oauth2ResourceDetail
могут быть и другие поля — их точный набор зависит от сервера авторизации.
Использование в сценарии
- Авторизация пользователя
- Авторизация бота
Если авторизацию получает пользователь бота, для каждого пользователя нужно использовать свои учетные данные.
state: UserName
q!: * как меня зовут *
script:
$temp.response = $http.query("https://example.com/api/v1/users/me", {
oauth2ResourceDetail: {
grantType: "client_credentials",
accessTokenUrl: "https://example.com/oauth2/token",
clientId: "bot",
// Секретный ключ нужно предварительно узнать у пользователя.
clientSecret: $client.secret,
// Другие поля
parameterIncludes: { realm: "/customer" },
tokenPrefix: "sso_1.0_"
}
});
if: $temp.response.isOk
a: Вас зовут {{$temp.response.data.name}}.
else:
a: Я не знаю…
Если авторизацию получает бот, для всех пользователей используются общие учетные данные.
state: Start
q!: $regex</start>
script:
$http.config({
oauth2ResourceDetail: {
grantType: "client_credentials",
accessTokenUrl: "https://example.com/oauth2/token",
clientId: "bot",
// Секретный ключ клиента нужно сохранить как токен проекта.
clientSecret: $secrets.get("EXAMPLE_COM_CLIENT_SECRET"),
// Другие поля
parameterIncludes: { realm: "/customer" },
tokenPrefix: "sso_1.0_"
}
});
state: BotName
q!: * как тебя зовут *
script:
$temp.response = $http.query("https://example.com/api/v1/apps/${botId}", {
query: {
botId: $request.botId
}
});
if: $temp.response.isOk
a: Меня зовут {{$temp.response.data.name}}.
else:
a: Я не знаю…