ym88659208ym87991671
Аутентификация mweb2app | Документация для разработчиков

Аутентификация на веб-странице партнера через мобильное приложение Сбербанк Онлайн (mWeb to App)

Обновлено 30 августа 2023

Протокол взаимодействия поддерживает функционал универсальных ссылок. Если на устройстве пользователя установлено мобильное приложение Сбербанк Онлайн, то операционная система направит запрос авторизации в мобильное приложение, иначе страница аутентификации откроется во внешнем браузере.

Для поддержки сценария партнеру нужно:

  • встроить скрипт, формирующий универсальную ссылку;
  • реализовать экран ошибки входа при несовпадении параметра state.

Для минимизации риска перехвата AuthCode в данном сценарии рекомендуется использовать метод защиты PKCE.

При вызове универсальной ссылки из браузера сценарий входа по Сбер ID через мобильное приложение в некоторых случаях может завершиться ошибкой - параметр state запросе и ответе не будут совпадать, т.к. сценарий начался и закончился в разных браузерах или нет возможности сохранить state локально (пример: приватный режим браузера; in-app браузер; все браузеры на iOS, кроме Safari).

Скрипт Сбер ID формирует универсальную ссылку в зависимости от браузера и режима просмотра с целью минимизации ошибочных сценариев описанных выше.

При обратном редиректе из мобильного приложения Сбербанк Онлайн (по redirect_uri) в браузере открывается новая вкладка. Для корректного продолжения сценария пользователя на сайте партнера следует сохранять контекст сессии (например, в cookie) при нажатии кнопки «Войти по Сбер ID» и восстанавливать его при обратном редиректе.

Скрипт можно найти в SberID JS SDK.

Пример встраивания скрипта:

<body>
<div class="navigator"></div>
<div class="result">
<a
href="https://online.sberbank.ru/CSAFront/oidc/authorize.do?response_type=code&scope=openid gender snils&client_id=AAAABBBB-XXXX-YYYY-ZZZZ-A12A618A4C3C&state=7bQfJTePBhlW&nonce=w9H8bh2yN4mQ&redirect_uri=https://example.com/external_login"
>Войти по Сбер ID</a
>
</div>
<!-- Начало скрипта -->
<script src="dist/sberid-deeplink.min.js"></script>
<script>
(function () {
function mySberidUniversallink(result) {
console.log(result);
/*{
"isPrivate": true,
"isUniversalLink": false,
"os": "windows",
"browser": "chrome",
"link": "https://online.sberbank.ru/CSAFront/oidc/authorize.do?response_type=code&scope=openid gender snils&client_id=AAAABBBB-XXXX-YYYY-ZZZZ-4C3C&state=7bQfJTePBhlW&nonce=w9H8bh2yN4mQ&redirect_uri=https://example.com/external_login",
"deeplink": "sberbankidlogin://sberbankid/sso?response_type=code&scope=openid gender snils&client_id=AAAABBBB-XXXX-YYYY-ZZZZ-4C3C&state=7bQfJTePBhlW&nonce=w9H8bh2yN4mQ&redirect_uri=https://example.com/external_login",
"universalLinkUrl: "https://online.sberbank.ru/CSAFront/oidc/sberbank_id/authorize.do",
"defaultLinkUrl": "https://online.sberbank.ru/CSAFront/oidc/authorize.do",
"deeplinkUrl": "sberbankidlogin://sberbankid/sso",
oidc: {
response_type: "code",
client_type: "PRIVATE",
client_id: "AAAABBBB-XXXX-YYYY-ZZZZ-A12A618A4C3C",
state: "7bQfJTePBhlW",
redirect_uri: "https://example.com/external_login",
scope: "openid gender snils",
nonce: "w9H8bh2yN4mQ",
display: "popup",
ext_redirect_uri: "googlechrome://example.com/external_login"
}
}*/
}
try {
var sberidUniversallink = new SberidUniversallink({
params:
'response_type=code&scope=openid gender snils&client_id=AAAABBBB-XXXX-YYYY-ZZZZ-4C3C&state=7bQfJTePBhlW&nonce=w9H8bh2yN4mQ&redirect_uri=https://example.com/external_login',
callback: mySberidUniversallink,
});
} catch (error) {
console.log(error);
}
})();
</script>
<!-- Конец скрипта -->
</body>

В результате выполнения скрипта:

  1. Обычная ссылка заменяется на универсальную в элементах, указанных в параметре selector, подставляется универсальная ссылка, сформированная из параметров params
  2. В функцию обратного вызова передаются данные, позволяющие сформировать универсальную ссылку самостоятельно
Название параметраОбязательныйОписание
paramsНетПараметры запроса кода авторизации
selectorНетHTML-элемент (id, стиль или вид), в котором нужно заменить ссылку запроса кода авторизации
callbackНетФункция обратного вызова, в которой партнер может реализовать свою логику формирования универсальной ссылки. Актуально, если партнер формирует ссылку на сервере
{
"params": "response_type=code&scope=openid gender snils&client_id=AAAABBBB-XXXX-YYYY-ZZZZ-4C3C&state=7bQfJTePBhlW&nonce=w9H8bh2yN4mQ&redirect_uri=https://example.com/external_login",
"selector": "myElement",
"callback": "mySberidUniversallink"
}
Название параметраОписание
isPrivateПараметры запроса кода авторизации
isUniversalLinktrue - из данного браузера можно запускать универсальную ссылку false - универсальную ссылку запускать нельзя, т.к. это может привести к ошибке на стороне партнера
osОперационная система
browserБраузер
linkПолная ссылка запроса кода авторизации
deeplinkDeeplink без параметров (для вызова мобильного приложение Сбербанк Онлайн в сценарии App2Webview)
universalLinkUrlУниверсальная ссылка без параметров
defaultLinkUrlОбычная ссылка без параметров
deepLinkUrlПолный deeplink (для вызова мобильного приложения Сбербанк Онлайн в сценарии App2Webview)
oidcobject. Содержит oidc параметры, переданные в скрипт при вызове
ext_redirect_uriПараметр, вложенный в объект oidc. Deeplink для вызова браузера в котором находился клиент при нажатии на кнопку «Войти по Сбер ID» и открытия в нем ссылки, указанной в redirect_uri. Указывается только если `os=ios
packageПараметр, вложенный в объект oidc.Deeplink для вызова браузера в котором находился клиент при нажатии на кнопку «Войти по Сбер ID» и открытия в нем ссылки, указанной в redirect_uri. Указывается только если `os=android
{
"isPrivate": "false",
"isUniversalLink": "true",
"os": "ios",
"browser": "safari",
"link": "https://online.sberbank.ru/CSAFront/oidc/sberbank_id/authorize.do?response_type=code&scope=openid gender snils&client_id=AAAABBBB-XXXX-YYYY-ZZZZ-A12A618A4C3C&state=7bQfJTePBhlW&nonce=w9H8bh2yN4mQ&redirect_uri=https://example.com/external_login",
"deeplink": "sberbankidlogin://sberbankid/sso",
"universalLinkUrl": "https://online.sberbank.ru/CSAFront/oidc/sberbank_id/authorize.do",
"defaultLinkUrl": "https://online.sberbank.ru/CSAFront/oidc/authorize.do",
"deepLinkUrl": "sberbankidlogin://sberbankid/sso?response_type=code&scope=openid gender snils&client_id=AAAABBBB-XXXX-YYYY-ZZZZ-4C3C&state=7bQfJTePBhlW&nonce=w9H8bh2yN4mQ&redirect_uri=https://example.com/external_login",
"oidc": [
{
"response_type": "code",
"scope": "openid name maindoc email mobile",
"client_id": "DA5278AC-A07F-C01A-B2D3-C231DBB2E20F",
"state": "af0ifjsldkj",
"nonce": "n-0S6_WzA2Mj",
"redirect_uri": "https%3A%2F%2Fclientresource.ru%2Fcb",
"client_type": "PRIVATE",
"code_challenge": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM",
"code_challenge_method": "S256"
}
],
"ext_redirect_uri": "googlechrome://example.com/external_login",
"package": "googlechrome://example.com/external_login",
}

Пример экрана ошибки (на стороне партнера), в случае несовпадения параметра state:

Скриншот ошибки

Кнопка «Войти по Сбер ID» в этом случае должна вести строго на стандартный сценарий входа в веб (Web to Web).

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.