@sberid/js-sdk
Version:
Javascript SDK для партнеров Сбер ID, упрощающая подключение SberbankID на сайте.
302 lines (232 loc) • 25.3 kB
Markdown
# @sberid/js-sdk
Javascript SDK для Партнеров Сбер ID, упрощающая подключение Сбер ID на сайте.
[![version][version-badge]][package]
[![Total Downloads][downloads-badge]][package]
[![PRs Welcome][prs-badge]][prs]
## Оглавление
- [@sberid/js-sdk](#sberidjs-sdk)
- [Оглавление](#оглавление)
- [Общие сведения](#общие-сведения)
- [Установка](#установка)
- [Подключение на сайте](#подключение-на-сайте)
- [Пример](#пример)
- [Описание параметров](#описание-параметров)
- [Параметры для инициализации SDK _(params)_](#параметры-для-инициализации-sdk-params)
- [Параметры для инициализации OIDC _(params.oidc)_](#параметры-для-инициализации-oidc-paramsoidc)
- [Параметры для генерации универсальных ссылок _(params.universalLink)_](#параметры-для-генерации-универсальных-ссылок-paramsuniversallink)
- [Параметры для отправки Sberbank Analytics _(params.sa)_](#параметры-для-отправки-sberbank-analytics-paramssa)
- [Параметры для отправки Sberbank Analytics _(params.buttonProps)_](#параметры-для-отправки-sberbank-analytics-paramsbuttonprops)
- [Параметры для функции обратного вызова](#параметры-для-функции-обратного-вызова)
- [Параметры для персонализированного баннера _(params.notification)_](#параметры-для-персонализированного-баннера-paramsnotification)
- [Параметры для быстрого входа _(params.fastLogin)_](#параметры-для-быстрого-входа-paramsfastlogin)
- [Успешная авторизация по Сбер ID](#успешная-авторизация-по-сбер-id)
- [Ошибка при входе по Сбер ID](#ошибка-при-входе-по-сбер-id)
- [Описание кодов ошибки](#описание-кодов-ошибки)
- [Копирайт](#копирайт)
## Общие сведения
Javascript SDK для Партнеров Сбер ID, упрощающая получение кода авторизации (AuthCode).
Для получения access token и данных клиента рекомендуется воспользоваться Java SDK или Python SDK.
SDK позволяет:
- генерировать стилизованную кнопку «Войти по Сбер ID»;
- выбирать способ отображения страницы авторизации Сбер ID (модальное окно, обычный переход);
- включить режим формирования универсальных ссылок для авторизации в мобильной версии браузера через мобильное приложение Сбербанк Онлайн;
- включить генерацию и проверку state в процессе аутентификации;
- отравлять в Sberbank Analytics события по показу кнопки, нажатию на кнопку и успешном/не успешном входе по Сбер ID.
- быстрый вход без необходимости перехода на страницу OIDC
- персонализированная кнопка входа
Для выполнения успешных запросов Вам необходимо зарегистрировать Ваше приложение в банке и подписать договор. Заявку можно оставить по [ссылке](https://developers.sber.ru/portal/tools/sber-id)
## Установка
Используя [npm](https://npmjs.org):
```sh
npm i --save @sberid/js-sdk
```
Используя [yarn](https://yarnpkg.com):
```sh
yarn add @sberid/js-sdk
```
## Подключение на сайте
Подключите продуктовую версию ([sberid-sdk.production.js][production]) или добавить ([index.esm.js][esm]) в проект для импорта небходимых зависимостей. Подключить файл стилей ([common.css][css]) в блок head.
[production]: ../sberid-sdk.production.js
[esm]: ../dist/index.esm.js
[css]: ../dist/styles/common.css
```html
<link href="js/libs/sberid-sdk/styles/common.css" rel="stylesheet">
<script src="js/libs/sberid-sdk/sberid-sdk.production.js"></script>
```
После загрузки страницы для инициализации приложения необходимо создать новый экземпляр SberidSDK. Функция создания принимает следующие параметры:
- **params** _(Object)_ - параметры для инициализации SDK
### Пример
```javascript
const oidcParams = {
response_type: 'code',
client_type: 'PRIVATE',
client_id: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
redirect_uri: 'https://example.com/oidc/success',
state: 'ut8Ar4MUZEMDPIiD2ko914y37s0Q0VKJgxeCkU0yzTY',
scope: 'openid name',
nonce: 'NfZscgwxPY7v0kYvuPfnFHA57bqHxQc3lV51Oiaxlo4',
};
const sa = {
enable: true,
init: 'auto',
clientId: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
clientName: 'ООО Ромашка',
};
const onSuccessCallback = (result) => {
console.log('Вы успешно вошли: ', result);
}
const onErrorCallback = (result) => {
console.log('Что-то пошло не так: ', result);
}
const params = {
oidc: oidcParams,
container: '.preview',
display: 'popup',
mweb2app: false,
generateState: false,
sa: sa,
notification: {
enable: false,
onNotificationBannerClose: () => {
console.log('Баннер закрыт');
},
onNotificationBannerOpen: () => {
console.log('Баннер открыт');
},
animation: true,
position: 'right',
},
personalization: true,
fastLogin: {
enable: true,
timeout: 1000,
mode: 'default',
},
utmProxyDisabled: false,
buttonProps: {
type: 'default',
custom: {
anonymous: 'Вход',
personal: 'Вход как {{userName}}',
},
},
onSuccessCallback,
onErrorCallback,
};
var sbSDK = new SberidSDK(params);
```
_Примечание: функции обратного вызова **onSuccessCallback** и **onErrorCallback** будут вызваны после успешной авторизации если страница Сбер ID была открыта в модальном окне_
### Описание параметров
Ниже будут приведены параметры для настройки отображение кнопок и режима работы SDK
#### Параметры для инициализации SDK _(params)_
- **oidc** _(Object)_ - параметры OIDC
- **container** _(String | HTMLDivElement)_ - селектор DOM-элемента или HTMLElement в котором будет размещена кнопка Войти по Сбер ID
- **display** _(String)_ - режим отображения страницы авторизации по Сбер ID (_popup_ - высплывающе окно, _page_ - в текущем окне)
- **mweb2app** _(Boolean)_ - включить возможность формирования универсальных ссылок. [Подробнее][m2a]
- **generateState** _(Boolean)_ - включить генерацию и проверку state
- **personalization** _(Boolean)_ - использовать ли персонализированную кнопку
- **notification** _(Object)_ - настройки персонализированного баннера
- **changeUser** _(Boolean)_ - настройки включения функционала смены пользователя
- **fastLogin** _(Object)_ - настройки быстрого входа
- **bottonProps** *(Object)* - настройки для стилизации кнопок
- **utmProxyDisabled** *(Boolean)* - отключить проксирование переданых в url utm_меток в запрос к Сбер ID (Список меток: utm_source utm_medium utm_campaign utm_term utm_content)
- **onSuccessCallback** _(Function)_ - функция обратного вызова при успешной авторизации
- **onErrorCallback** _(Function)_ - функция обратного вызова при возникновении ошибок во время авторизации
[m2a]: https://developer.sberbank.ru/doc/v1/sberbank-id/reqparametrs
**Для работы персонализированной кнопки необходимо направить запрос на [support@ecom.sberbank.ru](mailto:support@ecom.sberbank.ru) для добавления ваших доменов в список доверенных. В запросе указывается client_id и список доменов, с которых будет выполняться запрос на получение данных для персонализации кнопки. Адрес домена не должен заканчиваться символом "/". Сотрудник банка добавит домен в список разрешенных.**
_Примечание: Работы персонализированной кнопки не гарантируется в браузере Safari при включенной настройке Конфиденциальность -> Предотвращать перекрестное отслеживание_
#### Параметры для инициализации OIDC _(params.oidc)_
**Подробнее про параметры OIDC можно прочитать [здесь](https://developer.sberbank.ru/doc/v1/sberbank-id/reqparametrs)**
- **client_id** _(String)_ - идентификатор системы Партнера, выданный Партнеру при регистрации его системы в Банке (получено в письме от банка с адреса «support@ecom.sberbank.ru» с темой «Сбербанк Профиль»)
- **scope** _(String)_ - наименование групп данных, на которые подписана система Партнера (выдается при регистрации системы в Банке). Значение openid является обязательным и располагается на первой позиции. Разделитель – пробел.
- **redirect_uri** _(String)_ - адрес страницы Партнера, на которую будет перенаправлен клиент после успешной аутентификации в системе Банка. Временное ограничение: недопустимы символы “;” и “=“.
- **state** _(String)_ - значение, включенное в запрос, которое также возвращается в ответе. Может быть строка любого контента. Для предотвращения подделки межсайтовых запросов используется генерируемое случайным образом уникальное значение.
- **nonce** _(String)_ - если этот параметр сохранился на бэке sdk, то Партнер этот параметр не передает, параметр берется с бэка sdk
- **code_challenge** _(String)_ - хешированное значение секретного кода code_verifier Партнера. Хеширование выполняется методом, указанным в code_challenge_method. code_challenge = BASE64URL-ENCODE (SHA256 (ASCII (code_verifier)))).
\*Примечание: Если данные запрашиваются асинхронно с сервера, то после получения ответа от сервера обновить параметры можно вызвав метод **setOIDCParams(oidc)\***
_Примечание: Для регистрации приложения в системе Сбер ID и получения своего **client_id** воспользуйтесь инструкцией на [сайте](https://www.sberbank.ru/ru/person/dist_services/sberbankid/forbusiness)_
```javascript
const sbSDK = new SberidSDK(
{
container: 'preview',
display: 'popup',
},
);
fetch('/params')
.then((response) => response.json())
.then((params) => {
sbSDK.setOIDCParams(params);
});
```
#### Параметры для генерации универсальных ссылок _(params.universalLink)_
- **params** _(Object)_ - параметры OIDC
- **baseUrl** _(String)_ - Базовый адрес адрес для формирования ссылки входа по Сбер ID. Адрес по умолчанию https://online.sberbank.ru/CSAFront/oidc/authorize.do. Если вы используйте тестовый режим, укажите адрес тестовой страницы без параметров.
- **deeplinkUrl** _(String)_ - Базовый адрес адрес для формирования deeplink на мобальное приложение. Адрес по умолчанию sberbankidlogin://sberbankidsso. Если вы используйте тестовый режим, укажите тестовый deeplink без параметров.
- **universalLinkUrl** _(String)_ - Базовый адрес адрес для формирования универсальной ссылки входа по Сбер ID. Адрес по умолчанию https://online.sberbank.ru/CSAFront/oidc/sberbank_id/authorize.do. Если вы используйте тестовый режим, укажите адрес тестовой страницы без параметров
- **needAdditionalRedirect** _(Boolean)_ - Включить формирования адреса дополнительного редиректа у универсальных ссылках для возврата в браузер из которого начался сценарий авторизации.
_Подробнее про универсальные ссылки можно почитать на [странице][universallink]._
[universallink]: https://developer.sberbank.ru/doc/v1/sberbank-id/reqparametrs
#### Параметры для отправки Sberbank Analytics _(params.sa)_
- **enable** _(Boolen)_ - включение отправки метрик в Sberbank Analytics
- **init** _(String)_ - способ инициализации скрипта Sberbank Analytics: auto - скрипт инициализируется автоматически при создании SDK с параметрами по умолчанию, none - скрипт инициализируется Партнером.
- **clientId** _(String)_ - идентификатор системы Партнера, выданный Партнеру при регистрации его системы в Банке. Если параметр не задан, то значение будет взято из параметра params.oidc.client_id.
- **clientName** _(String)_ - название системы Партнера. Если параметр не задан, то значение будет взято из html элемента title страницы, на которой отображается кнопка.
#### Параметры для отправки Sberbank Analytics _(params.buttonProps)_
- **type** _(String)_ - вариант отображаемого на кнопке текста (возможные значения: 'default' | 'resume' | 'login' | 'fill' | 'custom')
- **loader** _(Boolean)_ - отображение лоадера на кнопках.
- **logo** _(String)_ - отображение логотипа Сбер ID на кнопке.
- **custom** _(Object)_ - тектовки кнопок при выбранном значение **_type_=_custom_**.
- **anonymous** _(String)_ - текст для обычной кнопки.
- **personal** _(String)_ - текст для персонализированной кнопки.
#### Параметры для функции обратного вызова
Если данные окно авторизации по Сбер ID открывалось в модальном окне, то на странице указанной в параметре redirect_uri необходимо вызвать метод **successWindowListener()**
#### Параметры для персонализированного баннера _(params.notification)_
- **enable** _(Boolen)_ - включение персонализированного баннера
- **onNotificationBannerClose** _(Function)_ - функция обратного вызова при закрытие баннера
- **onNotificationBannerOpen** _(Function)_ - функция обратного вызова при открытие баннера
- **animation** _(Boolen)_ - включение анимированного появления/исчезновения персонализированного баннера
- **position** _(String)_ - расположение баннера (возможноные значения _left_, _right_)
- **autoCloseDelay** _(Number)_ - задержка до скрытия баннера в мобильной версии в секундах
- **autoClose** _(Boolen)_ - включение скрытия баннера в мобильной версии
**Для отображения баннера должна быть включена настройка персонализированной кнопки (_personalization = true_). Для работы персонализированной кнопки необходимо направить запрос на [support@ecom.sberbank.ru](mailto:support@ecom.sberbank.ru) для добавления ваших доменов в список доверенных. В запросе указывается client_id и список доменов, с которых будет выполняться запрос на получение данных для персонализации кнопки. Адрес домена не должен заканчиваться символом "/". Сотрудник банка добавит домен в список разрешенных.**
#### Параметры для быстрого входа _(params.fastLogin)_
- **enable** _(Boolen)_ - включение быстрого входа
- **timeout** _(Number)_ - задержка до принудительного завершения быстрого входа при проблемах с создание запроса на сервер
- **mode** _(String)_ - режим работы быстрого входа (_auto_ - автоматически запускай быстрый вход после инициализации SDK, _default_ - запускай быстрый вход по нажатию на кнопку)
**Для выполнения быстрого входа должна быть включена настройка персонализированной кнопки (_personalization = true_). Для работы персонализированной кнопки необходимо направить запрос на [support@ecom.sberbank.ru](mailto:support@ecom.sberbank.ru) для добавления ваших доменов в список доверенных. В запросе указывается client_id и список доменов, с которых будет выполняться запрос на получение данных для персонализации кнопки. Адрес домена не должен заканчиваться символом "/". Сотрудник банка добавит домен в список разрешенных.**
##### Успешная авторизация по Сбер ID
Если страница авторизации по Сбер ID была открыта в модальном окне, то после редиректа по адресу, указанному в параметре **oidc.redirect_uri**, будет вызвана функция **onSuccessCallback** принимающая в качестве аргумента объект, содержащий следующие значения:
- **code** _(String)_ - код авторизации для получение authToken'a
- **state** _(String)_ - значение, включенное в запрос, которое было передано на страницу авторизации по Сбер ID.
_Примечание: полученные данные необходимо отправить на endpoint авторизации Вашего сайта, для получения информации о пользователе._
```javascript
function onSuccessCallback(result) {
fetch('/login?' + new URLSearchParams(result))
.then((response) => response.json())
.then((params) => {
console.log(params);
});
}
```
##### Ошибка при входе по Сбер ID
Если страница авторизации по Сбер ID была открыта в модальном окне и во время процесса авторизации произошла ошибка, то после редиректа по адресу, указанному в параметре **oidc.redirect_uri**, будет вызвана функция **onErrorCallback** принимающая в качестве аргумента объект, содержащий следующие значения:
- **code** _(String)_ - код ошибки
- **error** _(String)_ - значение, включенное в запрос, которое было передано на страницу авторизации по Сбер ID.
- **description** *(String)* - текстовое описание ошибки
_Примечание: в зависимости от кода ошибки можно показать пользователю уведомление с возможной причиной ошибки_
#### Описание кодов ошибки
- **invalid_request** - В запросе отсутствуют обязательные атрибуты
- **unauthorized_client** - АС - источник запроса не зарегистрирована или заблокирована в банке либо значение атрибута client_id не соответствует формату
- **unsupported_response_type** - Значение атрибута response_type не равно« code»
- **invalid_scope** - Значение атрибута scope не содержит параметр openid в начальной позиции либо запрошенный scope содержит значения, недоступные для АС источника запроса
- **access_denied** - Клиент отказался от передачи согласий
- **invalid_state** - Значение атрибута state не соответствует изначальному
- **window_closed** - Клиент закрыл окно авторизации по Сбер ID
### Копирайт
Автор: Сбер ID
Сайт: https://www.sberbank.ru/ru/person/dist_services/sberbankid/forbusiness
[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square
[prs]: https://makeapullrequest.com
[version-badge]: https://img.shields.io/npm/v/@sberid/js-sdk.svg?style=flat-square
[package]: https://www.npmjs.com/package/@sberid/js-sdk
[downloads-badge]: https://img.shields.io/npm/dt/@sberid/js-sdk.svg?style=flat-square