ym88659208ym87991671
Обработка ответа после авторизации | Документация для разработчиков

Обработка ответа после авторизации

Обновлено 30 мая 2024

После авторизации пользователем по Сбер ID будет вызван обратный deeplink равный redirectUri, переданного на старте входа. Данный deeplink вызовет ваше приложение и будет содержать информацию о входе.

В манифесте вашего приложения для activity, которая будет обрабатывать результат авторизации по Сбер ID, необходимо указать scheme и host обратного deeplink.

Если хотите обрабатывать обратный deeplink в той же activity, в которой и стартовали аутентификацию, необходимо указать в атрибуте launchMode для вашей активити значение "singleTop" и получать интент с результатом в методе onNewIntent(intent: Intent).

<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"> //для обработки deeplink в той же activity
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="redirect"
android:scheme="partner" />
</intent-filter>
</activity>

Для проверки результата необходимо передать полученный intent в метод «SID.Login.getIDAuthResult(intent)», который обработает ответ и вернет сущность SberIDResultModel. В этой модели будут содержаться все необходимые данные для аутентификации, включая nonce и authCode. Вам нужно передать их на свой бэкенд для дальнейшей аутентификации вместе с codeVerifier (если используете), созданным на этапе входа.

Описание модель результата SberIDResultModel

/**
* Сущность ответа от SberID
* @property isSuccess true если ответ положительный и вход произведен удачно.
* @property nonce Значение, сгенерированное внешней АС для предотвращения атак
* повторения.
* @property state Значение, сгенерированное внешней АС для предотвращения CSRF атак.
* @property authCode Код авторизации клиента.
* @property errorDescription Текст ошибки, не показывайте клиентам, они только для разработчиков.
* Типы ошибок:
* - invalid_request: В запросе отсутствуют обязательные атрибуты;
*
* - unauthorized_client: АС-источник запроса не зарегистрирована в
* банке, АС-источник запроса заблокирована в банке, или значение
* атрибута client_id не соответствует формату;
*
* - unsupported_response_type: Значение атрибута response_type не равно
* «code»;
*
* - invalid_scope: Значение атрибута scope не содержит параметр openid в
* начальной позиции или запрошенный scope содержит значения, недоступные
* для АС-источника запроса
* @property errorCode Приходит только в случае ошибки 5, когда вы неверно передали параметры,
* ошибки описаны выше.
*/
data class SberIDResultModel @JvmOverloads constructor(
var isSuccess: Boolean? = null,
var state: String? = null,
var nonce: String? = null,
var authCode: String? = null,
var errorDescription: String? = null,
var errorCode: String? = null
)

Пример обработки результата

В той же activity:

//В методе onNewIntent, если применить для activity android:launchMode="singleTop"
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
val result = SID.Login.getIDAuthResult(intent)
if (resultModel.isSuccess == true) {
// Отправьте result.authCode, resultModel.state, resultModel.nonce на свой бэк для окончания авторизации
} else {
// Ошибка, отобразите пользователю, что вход не получился
}
}

При обработки в новой activity можно перехватить в onCreate(savedInstanceState: Bundle?):

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val result = SID.Login.getIDAuthResult(intent)
if (resultModel.isSuccess == true) {
// Отправьте result.authCode, resultModel.state, resultModel.nonce на свой бэк для окончания авторизации
} else {
// Ошибка, отобразите пользователю, что вход не получился
}
}
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.