1 - OpenID Connect
1.1 - Historia
OpenID Connect fue ratificado como estándar por sus miembros el 26 de Febrero del 2014. OpenID Connect provee un framework de identidad para interacciones RESTful. Fue desarrollado bajo el alero de OpenID Foundation y tiene sus raíces en OpenID, pero fue influido en gran medida por OAuth 2.0.
El anuncio emitido por la OpenID Foundation referente al lanzamiento del estándar OpenID Connect está disponible en aquí
OpenID, quien sigue los pasos de SAML en 2005, revolucionó la autenticación web. Brad Fitzpatrick, fundador de LiveJournal, indicó. El principio básico tras ambos OpenID y SAML, son los mismos. Ambos pueden ser utilizados para facilitar single sign-on (SSO)
y cross-domain identity federation
. OpenID mantiene una mayor comunidad, centra mejor al usuario y es descentralizado. Yahoo! incorporó soporte para OpenID en Enero del 2008, MySpace anunció soporte para Julio de ese mismo año, Google uniéndose en Octubre. Para diciembre del 2009, hay más de 1 billon de cuentas de usuario OpenID-Enabled
. Fue un tremendo éxito como protocolo SSO Web.
1.2 - Inicio Rápido
¿Cuántos perfiles mantienes hoy en diferentes sitios web?. Quizás tienes una cuenta Yahoo!, una en Facebook, otra en Google, etc. Cada vez que se actualiza un dato personal, teléfono o dirección, tienes que actualizarlo en cada lugar o mantener datos desactualizados. OpenID soluciona este problema de datos de perfil distribuidos por diferentes proveedores. Con OpenID, mantienes tu perfil solamente en tu OpenID provider
. Y todos los otros sitios se transforman en OpenID relying parties
. Estos “hablan” con tu proveedor OpenID para obtener tu información de perfil.
Cada vez que intentes entrar a un sitio web OpenID relying party
; serás redireccionado al OpenID provider
. Ahí deberás autenticarte y aprobar el requerimiento de atributos hecho por el relying party
. Al aprobar, eres redireccionado de vuelta al sitio del relying party
con los atributos del request.
Con SSO, solamente autentificas en el proveedor OpenID. Esto siendo, un relying party
te redirecciona por primera vez. Luego de eso, el OpenID provider
no vuelve a consultar por credenciales, sino que utiliza la sesión creada previamente. Esta sesión autenticada es mantenida ya sea por una cookie hasta que el browser sea cerrado, o por una cookie persistente.
sequenceDiagram;
participant Usuario
participant Relying Party
participant OpenID Provider
Usuario->>+Relying Party: Intento de Login
Relying Party-->>-Usuario: Login link
Usuario->>Usuario: Click link
alt auth flow
Usuario->>+OpenID Provider: Login request
OpenID Provider-->>-Usuario: Render toma de evidencias
Usuario->>+OpenID Provider: Proporciona evidencias
end
alt consent flow
OpenID Provider-->>-Usuario: Render toma consentimientos
Usuario->>+OpenID Provider: Proporciona consentimientos
end
OpenID Provider-->>-Usuario: 302 callback url
Usuario->>Usuario: resuelve 302
Usuario->>Relying Party: Entrega code
Relying Party->>OpenID Provider: Intercambio code por tokens
OpenID Provider->>Relying Party: AccessToken y/o idToken
1.3 - ID Token
El ID Token es la principal adición a OAuth2 que realiza OpenID Connect. Es un JSON web token JWT
que transporta información relevante al usuario autenticado desde el servidor de autorización (OpenID provider
) hacia la aplicacion cliente (OpenID relaying party
). La estructura de un ID Token es definida por la especificación OpenID Connect. A continuación un ejemplo de ID Token:
{
"iss": "https://accounts.autentiaplus.id/",
"sub": "d733edad-4d05-402a-9b66-090b06d40f7a",
"name": "Luis Ignacio Cisternas Rojas",
"given_name": "Luis Ignacio",
"family_name": "Cisternas Rojas",
"gender": "male",
"updated_at": 1604416603,
"aud": "67jjuyuy7JHk12",
"nonce": "88797jgjg32323",
"exp": "1416283970",
"iat": "1416283970",
"auth_time": ":1311280969",
"acr": "urn:acr:password",
"amr": "password",
"azp": "67jjuyuy7JHk12"
}
Atributo | Descripcion |
---|---|
iss | Identifica al emisor del token en formato HTTPS sin ningún parámetro o fragmentos. |
sub | El identificador local del usuario en el OpenID provider. |
aud | La audiencia del token, Puede ser una lista de identificadores, pero debe contener el OAuth client ID en él; de otra forma el client ID debe ser agregado al parámetro azp |
nonce | Un nuevo parámetro que introduce la especificación OpenID Connect al authorization flow. En adición a los parámetros definidos por OAuth 2.0, la aplicación cliente puede opcionalmente incluir el parámetro nonce . Este parámetro permite mitigar ataques de “replay”. El servidor de autorización debe rechazar cualquier request si encuentra que dos o mas request con el mismo nonce . Si un nonce esta presente el el request de autenticación, entonces el servidor de autenticación debe incluir el mismo valor dentro del ID token. La aplicacion cliente debe validar que el valor de nonce devuelto por el servidor sea el mismo que se envió originalmente. |
exp | El tiempo de expiración del token en segundos desde 1970-01-01T0:0:0Z (UTC), Unix Epoch. |
iat | El tiempo de emisión del token en segundos desde 1970-01-01T0:0:0Z (UTC), Unix Epoch. |
auth_time | El momento en el cual el usuario es autenticado por el OpenID provider. Si el usuario estaba previamente autenticado, entonces el OpenID provider no pedirá autenticación por parte del usuario. Como un OpenID provider maneja la sesión o el mecanismo de autenticación esta fuera del alcance de la especificación OpenID Connect. Un usuario podría crear una sesión entrando a un sitio web diferente a la aplicación cliente. En ese caso, el OpenID provider debe mantener el tiempo de autenticación original. Este es el valor de auth_time. |
acr | Authentication Context Reference o acr . El valor de este parámetro debe ser comprendido tanto por la aplicación cliente como el proveedor de autenticación. Solicita un nivel de autenticación para el request. |
amr | Authentication Method References p amr , Indica como fue autenticado el usuario por el provedor de identidad. Puede ser un array de valores. Tanto la aplicación cliente como el proveedor de autenticación deben comprender estos valores. |
azp | Authorized Party o azp , Es necesario cuando existe una audiencia (aud ) y su valor es diferente al OAuth client ID. El valor de azp debe ser el OAuth client ID. |
1.4 - Authorization Request
curl --location --request GET 'https://accounts.autentiaplus.id/oauth2/auth? \
response_type=code&
scope=openid&
client_id=eacd29ca-1bcf-418d-8b39-63c22b75bcf7
redirect_uri=https://localhost:3000/callback&
response_mode=query&
nonce=aXK2rXuApo&
state=8KHUzRUxtZ&
display=page&
prompt=login&
max_age=24h&
ui_locales=es-CL&
id_token_hint=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c&
login_hint=16182517-4&
acr_values=urn:acr:facial'
Atributo | Descripción | Tipo | Requerido |
---|---|---|---|
response_type | El tipo de token que espera el cliente obtener | string | * |
scope | Los scopes o permisos que el cliente requiere del usuario |
string | * |
client_id | Identificador de la aplicación cliente | string | * |
redirect_uri | URL Publica SSL, donde la aplicación cliente espera recibir el resultado del flujo | string | * |
response_mode | Determina como el authorization server envía los parámetros de respuesta |
string | |
nonce | Mitiga replay attacks . El authorizationserver rechaza cualquier requerimiento si encuentra que dos de ellos contienen el mismo nonce |
string | *pkce |
state | Mitiga CSRF attacks . El authorizationserver exige este parámetro para flujos PKCE |
string | *pkce |
display | Indica como la aplicación cliente espera que el authorization server despliegue la página de login y consent |
string | |
prompt | Indica si el cliente requiere desplegar la página de login, de consent, ambas o ninguna | string | |
max_age | Define la máxima antigüedad que una sesión anterior podría tener para ser reutilizada | string | |
ui_locales | Expresa la localización requerida por el cliente | string | |
id_token_hint | Un ID Token obtenido previamente por la aplicación cliente | string | |
login_hint | Indica el username que la aplicación cliente espera autenticar |
string | |
acr_values | authentication context reference values indica el nivel de autenticación requerida por el cliente |
string |
1.5 - Scope
(StandardClaims)[https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims]
Scope | Claims | Requerido |
---|---|---|
openid | Retorna el claim sub , el cual identifica de forma única al usuario. Adicionalmente, se entregan default claims. ver ID Token |
* |
birthdate | Retorna el claim birthdate |
|
profile | Retorna el claim profile , birthdate , picture |
|
credential | Retorna el claim credential . ver Credential |
|
Retorna el claim email y email_verified |
||
phone | Retorna el claim phone_number y phone_number_verified |
|
offline_access | Retorna refresh token |
1.6 - Credential
Credential Payload
{
"sub": "16182517-4",
"country": "CHL",
"typ": "rut",
"iss": "srcei"
}
1.7 - Authentication Context Reference
Strategy ACR’s
Valor | Descripción | Alias | Locales |
---|---|---|---|
urn:acr:default | Verificación numero de documento | autoidentify | es_CL |
urn:acr:password | Verificación de password | password | * |
urn:acr:facial:live | Verificación facial CON prueba de vida | facial | es_CL, es_PE |
urn:acr:facial:simple | Verificación facial SIN prueba de vida | facialself | es_CL, es_PE |
urn:acr:facial:live?=sample=true | Verificación facial CON prueba de vida + muestra | facial | es_CL, es_PE |
urn:acr:facial:simple?=sample=true | Verificación facial SIN prueba de vida + muestra | facialself | es_CL, es_PE |
urn:acr:facial:live?=sample=false | Verificación facial CON prueba de vida | facial | es_CL, es_PE |
urn:acr:facial:simple?=sample=false | Verificación facial SIN prueba de vida | facialself | es_CL, es_PE |
urn:acr:finger:reader | Verificación dactilar con lector | es_CL, es_PE | |
urn:acr:finger:picture | Verificación dactilar con cámara | es_CL, es_PE | |
urn:acr:finger:reader?=sample=true | Verificación dactilar con lector + muestra | es_CL, es_PE | |
urn:acr:finger:picture?=sample=true | Verificación dactilar con cámara + muestra | es_CL, es_PE | |
urn:acr:finger:reader?=sample=false | Verificación dactilar con lector | es_CL, es_PE | |
urn:acr:finger:picture?=sample=false | Verificación dactilar con cámara | es_CL, es_PE |
2FA ACR
Valor |
---|
urn:acr:otp:email |
urn:acr:otp:phone |
urn:acr:otp:email?=recipient=foo@bar.com |
urn:acr:otp:phone?=recipient=+56911111111 |
1.8 - Librerías
Movil
Frontend
Backend
2 - Movil
2.1 - SDK
Bienvenido a AutentiaSDK
El SDK de Autentia contiene varias funcionalidades, las cuales serán descritas en el contenido de éste documento.
Tabla de contenido
Integración
Siga las siguientes instrucciones para el correcto uso del SDK:
- Abrir el archivo build.gradle a nivel de aplicación.
- Ubicar zona de dependencies.
- Agregar la siguiente línea de comando.
implementation('id.autentiaplus:sdk:x.y.z')
Luego, para agregar las dependencias de maven al proyecto sigue los siguientes pasos
- Abrir el archivo build.gradle a nivel de proyecto.
- Ubicar la zona de repositorios.
- Agregar las siguientes líneas de código.
allprojects {
repositories {
google()
jcenter()
maven {
url "https://gitlab.endpoints.autentiax-ctl.cloud.goog/api/v4/projects/251/packages/maven"
name "Autentia SDK"
credentials(HttpHeaderCredentials) {
name = 'Private-Token'
value = '<<TOKEN_VALUE>>'
}
authentication {
header(HttpHeaderAuthentication)
}
}
maven { url 'https://maven.microblink.com' }
}
}
Credenciales
Para poder descargar y utilizar el SDK es necesario colocar las credenciales como aparece en el ejemplo anterior.
Debe solicitar las credenciales a su ejecutivo de ventas o jefe de proyecto asignado.
Requisitos
El SDK requiere que el API mínimo de Android sea 25, como se muestra en la pantalla.
android {
...
defaultConfig {
minSdkVersion 25
...
}
...
}
Autentia H+
Descripción
H+ tiene la funcionalidad de poder validar a una persona mediante sus huellas digitales. Con una foto que captura la huella dactilar es posible verificar que una persona sea quien dice ser.
Implementación
Ésta funcionalidad consta de 2 métodos, los cuales iniciarán el flujo H+, la diferencia es la siguiente:
El Método 1 requerirá escribir el OTP_MOVIL mediante una interfaz de usuario ya sea de manera manual o mediante lectura de un código QR.
El Método 2 no lo solicitará, ya que asumirá que viene en la llamada y ejecutará este paso automáticamente.
Método 1 - Kotlin
SdkManager(this).hPlusCaller(REQUEST_CODE)
Método 2 - Kotlin
SdkManager(this).hPlusCaller(OTP_MOVIL,REQUEST_CODE)
Parámetros
OTP_MOVIL: Código numérico de 6 dígitos en formato String.
REQUEST_CODE: Código asignado por el usuario en formato Int para obtener la respuesta de H+ en el método onActivityResult.
Resultados
Para obtener los resultados de H+, se utiliza el método
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == REQUEST_CODE){
when (resultCode){
Activity.RESULT_OK -> {
if(data!=null){
if(data.hasExtra("autentia_sdk_error")){
val sdk_error = data.getStringExtra("autentia_sdk_error")
//do something with sdk_error
}
if(data.hasExtra("h_plus_response")){
val sdk_response = data.getBooleanExtra("h_plus_response",false)
//do something with sdk_response
}
if(data.hasExtra("autentia_sdk_code")){
val sdk_code = data.getIntExtra("autentia_sdk_code",-1)
//do something with sdk_code
}
}
}
Activity.RESULT_CANCELED -> {
//do something with result
}
}
}
}
Posibles respuestas de RESULT_OK
Este resultado se da cuando el SDK termina el flujo completo de manera natural.
autentia_sdk_error: Nombre del error tipo String.
autentia_sdk_code: Código del error ocurrido, tipo Int.
h_plus_response: Indica si la verificación fue exitosa o no, tipo boolean.
Cuando el resultado es exitoso, autentia_sdk_code tendrá valor 0 y h_plus_response puede tomar valor true o false.
El valor true se retorna cuando la validación de identificación fue exitosa.
El valor false se retorna cuando la validación de identificación fue fallida.
Posibles respuestas de RESULT_CANCELED
Este resultado se da cuando el SDK no termina el flujo completo de manera natural, ya que el usuario canceló o cerró el flujo invocado.
H+ maneja los errores de la siguiente manera:
Código | Valor | Descripción |
---|---|---|
399 | h_plus_otp_error | El OTP es inválido |
398 | h_plus_cancel_permission | El usuario canceló los permisos de la aplicación y aseguró que no quería darle permisos (hay un diálogo de confirmación) |
397 | h_plus_unexpected_error | Error no previsto por el SDK |
Flujos Registro sin huella dactilar
Descripción
Los flujos de registro son los que tienen la capacidad de registrar usuarios en nuestras bases de datos, utilizando el hardware del dispositivo Android.
Para la captura de los documentos del usuario, Autentia SDK integra dos APIs de lectura de documentos, una nuestra, llamada AUTENTIA API y la otra de MICROBLINK, llamada MICROBLINK API, para ésta última es necesario una llave productiva del producto.
Implementación
Ésta funcionalidad cuenta con dos métodos, los cuales inicializan los flujos de registro, la diferencia de éstos son las siguientes:
El Método 1 debe ser utilizado con AUTENTIA API, para ésto el parámetro APIDEFAULT debe llevar el nombre corespondiente a autentia_api.
El Método 2 debe ser utilizado con MICROBLINK API, para ésto el parámetro APIDEFAULT debe llevar el nombre corespondiente a microblink_api y además el parámetro APYKEY debe ser enviado con la Key de Microblink.
Método 1 - Kotlin
SdkManager(this).docIntentCaller(APIDEFAULT,REQUEST_CODE)
Método 2 - Kotlin
SdkManager(this).docIntentCaller(APIDEFAULT,APIKEY,REQUEST_CODE)
Parámetros
APIDEFAULT: String correspondiente a la api de lectura de documentos que se quiera utilizar, debe tener uno de los siguientes valores : autentia_api o microblink_api
APIKEY: String correspondiente a la llave otorgada por microblink.
REQUEST_CODE: Código asignado por el usuario en formato Int para obtener la respuesta del proceso en el método onActivityResult.
Resultados
Para obtener los resultados del registro de documentos, se utiliza el método onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == REQUEST_CODE){
when (resultCode){
Activity.RESULT_OK -> {
if(data!=null){
if(data.hasExtra("autentia_sdk_error")){
val sdk_error = data.getStringExtra("autentia_sdk_error")
//do something with sdk_error
}
if(data.hasExtra("autentia_sdk_code")){
val sdk_code = data.getIntExtra("autentia_sdk_code",-1)
//do something with sdk_code
}
if(data.hasExtra("autentia_token")){
val registry_token = data.getStringExtra("autentia_token")
//do something with registry_token
}
}
}
Activity.RESULT_CANCELED -> {
//do something with result
}
}
}
}
Posibles respuestas de RESULT_OK
Este resultado se da cuando el SDK termina el flujo completo de manera natural.
autentia_sdk_error: Nombre del error tipo String.
autentia_sdk_code: Código del error ocurrido, tipo Int.
autentia_token: Es un token de registro, devuelto solo en finalización del flujo de registro y se utiliza en caso de que se quiera continuar con un flujo de Login (VER SECCIÓN XXXXXXXXXXXX).
Cuando el resultado es exitoso, autentia_sdk_code tendrá valor 0 y autentia_token contendrá un denominado token de registro, el cuál sirve para realizar un login con nuestros servicios (VER SECCIÓN XXXXXXX).
Posibles respuestas de RESULT_CANCELED
Este resultado se da cuando el SDK no termina el flujo completo de manera natural, ya que el usuario canceló o cerró el flujo invocado.
Tabla de Errores flujos de registro.
Errores Microblink:
Código | Valor | Descripción |
---|---|---|
999 | cualquiera | Retorna el String de error de la API Microblink directamente. |
998 | microblink_invalid_key | La key de microblink es inválida. |
997 | microblink_empty | Léase la documentación oficial de Microblink para la descripción de éstos casos. |
996 | microblink_uncertain | Léase la documentación oficial de Microblink para la descripción de éstos casos. |
995 | microblink_not_key_found | Cuando no se envía el parámetro APIKEY en la llamada al SDK. |
3 | document_person_underage | La persona no tiene una edad válida para continuar el proceso. |
Errores Generales:
Código | Valor | Descripción |
---|---|---|
1000 | cualquiera | Error no previsto por el SDK. |
699 | retrofit_http_error | Error de retrofit, con el envío de evidencias. |
298 | invalid_extra_values | Alguno de los valores enviados en la llamada al SDK no son válidos. |
297 | invalid_return_code | Cuando el return code de alguno de los flujos no es el correcto. |
1 | document_not_supported | El documento reconocido no es soportado para el flujo que se está realizando. |
2 | document_invalid | El documento reconocido no es válido para el flujo que se está realizando. |
4 | document_invalid_flow | El flujo que se quiere realizar no está soportado. |
5 | nfc_error | Existe un problema con el NFC del dispositivo. |
6 | front_camera_error_open | Existe un problema abriendo la cámara frontal del dispositivo. |
7 | front_camera_error_preview | Error creando la vista de la cámara. |
11 | delete_images_error | Error eliminando las imágenes del dispositivo. |
Flujos Registro con huella dactilar
Descripción
Los flujos de registro con huella dactilar son los que tienen la capacidad de registrar usuarios en nuestras bases de datos, utilizando el hardware del dispositivo Android y dispositivos biométricos.
Para la captura de los documentos del usuario, Autentia SDK integra dos APIs de lectura de documentos, una nuestra, llamada AUTENTIA API y la otra de MICROBLINK, llamada MICROBLINK API, para ésta última es necesario una llave productiva del producto.
Para la captura de las huellas dactilares, es necesario utilizar uno de los huellero Eikon o UareU (DETERMINAR LOS MODELOS Y DEMASES***************).**
Para algunos flujos es necesario que el dispositivo tenga NFC
Implementación
Ésta funcionalidad cuenta con dos métodos, los cuales inicializan los flujos de registro, la diferencia de éstos son las siguientes:
El Método 1 debe ser utilizado con AUTENTIA API, para ésto el parámetro APIDEFAULT debe llevar el nombre corespondiente a autentia_api.
El Método 2 debe ser utilizado con MICROBLINK API, para ésto el parámetro APIDEFAULT debe llevar el nombre corespondiente a microblink_api y además el parámetro APYKEY debe ser enviado con la Key de Microblink.
Método 1 - Kotlin
SdkManager(this).fingerIntentCaller(APIDEFAULT,REQUEST_CODE)
Método 2 - Kotlin
SdkManager(this).fingerIntentCaller(APIDEFAULT,APIKEY,REQUEST_CODE)
Parámetros
APIDEFAULT: String correspondiente a la api de lectura de documentos que se quiera utilizar, debe tener uno de los siguientes valores : autentia_api o microblink_api
APIKEY: String correspondiente a la llave otorgada por microblink.
REQUEST_CODE: Código asignado por el usuario en formato Int para obtener la respuesta del proceso en el método onActivityResult.
Resultados
Para obtener los resultados del registro de documentos, se utiliza el método onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == REQUEST_CODE){
when (resultCode){
Activity.RESULT_OK -> {
if(data!=null){
if(data.hasExtra("autentia_sdk_error")){
val sdk_error = data.getStringExtra("autentia_sdk_error")
//do something with sdk_error
}
if(data.hasExtra("autentia_sdk_code")){
val sdk_code = data.getIntExtra("autentia_sdk_code",-1)
//do something with sdk_code
}
if(data.hasExtra("autentia_token")){
val registry_token = data.getStringExtra("autentia_token")
//do something with registry_token
}
}
}
Activity.RESULT_CANCELED -> {
//do something with result
}
}
}
}
Posibles respuestas de RESULT_OK
Este resultado se da cuando el SDK termina el flujo completo de manera natural.
autentia_sdk_error: Nombre del error tipo String.
autentia_sdk_code: Código del error ocurrido, tipo Int.
autentia_token: Es un token de registro, devuelto solo en finalización del flujo de registro y se utiliza en caso de que se quiera continuar con un flujo de Login (VER SECCIÓN XXXXXXXXXXXX).
Cuando el resultado es exitoso, autentia_sdk_code tendrá valor 0 y autentia_token contendrá un denominado token de registro, el cuál sirve para realizar un login con nuestros servicios (VER SECCIÓN XXXXXXX).
Posibles respuestas de RESULT_CANCELED
Este resultado se da cuando el SDK no termina el flujo completo de manera natural, ya que el usuario canceló o cerró el flujo invocado.
Tabla de Errores flujos de registro.
Errores Microblink:
Código | Valor | Descripción |
---|---|---|
999 | cualquiera | Retorna el String de error de la API Microblink directamente. |
998 | microblink_invalid_key | La key de microblink es inválida. |
997 | microblink_empty | Léase la documentación oficial de Microblink para la descripción de éstos casos. |
996 | microblink_uncertain | Léase la documentación oficial de Microblink para la descripción de éstos casos. |
995 | microblink_not_key_found | Cuando no se envía el parámetro APIKEY en la llamada al SDK. |
3 | document_person_underage | La persona no tiene una edad válida para continuar el proceso. |
Errores Generales:
Código | Valor | Descripción |
---|---|---|
1000 | cualquiera | Error no previsto por el SDK. |
699 | retrofit_http_error | Error de retrofit, con el envío de evidencias. |
298 | invalid_extra_values | Alguno de los valores enviados en la llamada al SDK no son válidos. |
297 | invalid_return_code | Cuando el return code de alguno de los flujos no es el correcto. |
1 | document_not_supported | El documento reconocido no es soportado para el flujo que se está realizando. |
2 | document_invalid | El documento reconocido no es válido para el flujo que se está realizando. |
4 | document_invalid_flow | El flujo que se quiere realizar no está soportado. |
5 | nfc_error | Existe un problema con el NFC del dispositivo. |
6 | front_camera_error_open | Existe un problema abriendo la cámara frontal del dispositivo. |
7 | front_camera_error_preview | Error creando la vista de la cámara. |
11 | delete_images_error | Error eliminando las imágenes del dispositivo. |
199 | fingerprint_reader_not_found | Error cuando se intenta realizar un flujo de Registor con huella sin un lecttor de huellas compatible conectado. |
198 | fingerprint_cancel_permission | Error que se da cuando el usuario cancela los permisos de acceso al lector de huellas. |
197 | fingerprint_opening_error | Error abriendo la conexión con el lector de huellas desde el SDK. |
196 | fingerprint_not_working_properly | El lector de huellas conectado no funciona correctamente. |
195 | fingerprint_error_getting_info | Error obteniendo la información necesaria desde el huellero. |
194 | fingerprint_error_ci_blocked | Error de cédula bloqueada. |
193 | fingerprint_error_access_error | Error solicitando los permisos del lector de huellas. |
Flujos Login Autentia SDK
Descripción
Los flujos de Login de Autentia SDK fueron creados para facilitar la integración de nuestros clientes con el Login de Autentia ID, facilitando la toma de evidencias y la comunicación del usuario desde aplicaciones móviles con nuestros servicios.
Para la captura de los documentos sólo está disponible la api AUTENTIA API, MICROBLINK API no está disponible para ésta funcionalidad.
Se asume que el integrador ha cumplido con todos los pre-requisitos necesarios para el funcionamiento de éste flujo. (VÉASE AQUÍ LOS REQUISITOS+++++++++++++++++++++++++++++++++++++)
Implementación
Ésta funcionalidad cuenta con dos métodos, los cuales inicializan los flujos de registro, la diferencia de éstos son las siguientes:
El Método 1 asume que no se recibirá la URL de Concent Flow, sino que la abre directamente después de terminar el proceso de Autorización.
El Método 2 recibe un parámetro extra RETURN_CONCENT_URL, en el cuál se configura explícitamente qué hacer con la URL de Concent Flow.
Método 1 - Kotlin
SdkManager(this).sendLoginChallenge(LOGIN_CHALLENGE,REQUEST_CODE)
Método 2 - Kotlin
SdkManager(this).sendLoginChallenge(LOGIN_CHALLENGE,RETURN_CONCENT_URL,APIKEY,REQUEST_CODE)
Parámetros
LOGIN_CHALLENGE: String correspondiente al Login Challenge recibido por la aplicación cliente al momento de comenzar un Login Flow. (se recibe a través de deep link pre-configurado.)
RETURN_CONCENT_URL: String correspondiente a la URL del ConcentFlow. ésta debe ser desplegada en un navegador para realizar el flujo de Concent.
REQUEST_CODE: Código asignado por el usuario en formato Int para obtener la respuesta del proceso en el método onActivityResult.
Resultados
Para obtener los resultados del registro de documentos, se utiliza el método onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == REQUEST_CODE){
when (resultCode){
Activity.RESULT_OK -> {
if(data!=null){
if(data.hasExtra("autentia_sdk_error")){
val sdk_error = data.getStringExtra("autentia_sdk_error")
//do something with sdk_error
}
if(data.hasExtra("autentia_sdk_code")){
val sdk_code = data.getIntExtra("autentia_sdk_code",-1)
//do something with sdk_code
}
if(data.hasExtra("autentia_concent_url")){
val concent_url = data.getStringExtra("autentia_concent_url")
//do something with autentia_concent_url
}
}
}
Activity.RESULT_CANCELED -> {
//do something with result
}
}
}
}
Posibles respuestas de RESULT_OK
Este resultado se da cuando el SDK termina el flujo completo de manera natural.
autentia_sdk_error: Nombre del error tipo String.
autentia_sdk_code: Código del error ocurrido, tipo Int.
autentia_concent_url: Es la URL del registro en formato STRING, debe ser desplegada en el navegador para continuar el flujo de Concent.
Cuando el resultado es exitoso, autentia_sdk_code tendrá valor 0 y dependiendo de si se solicitó el retorno de la Url de concent, ésta volverá en autentia_concent_url.
Sino se solicitó el retorno de la Url de Concent, Autentia SDK abrirá un navegador y comenzará automáticamente el Flujo de Concent.
Posibles respuestas de RESULT_CANCELED
Este resultado se da cuando el SDK no termina el flujo completo de manera natural, ya que el usuario canceló o cerró el flujo invocado.
Tabla de Errores flujos de registro.
Errores Flujo Login:
Código | Valor | Descripción |
---|---|---|
697 | login_volley_error | Error correspondiente a la conexión con el servicio de Login. |
696 | login_timeout_error | Error de timeout de conexión con el servicio de Login. |
695 | login_execution_error | Error de ejecución de las comunicaciones con el servicio de Login. |
694 | login_interrupted_error | Ejecución interrumpida. |
693 | cualquiera | Error HTTP recibido en la conexión con los servicios de Login. |
692 | login_pending_credencial | El estado del login_challenge continúa pending cuando éste debería haber cambiado. |
691 | login_failed_credencial | El estado del login_challenge está en failed, lo que quiere decir que está invalidado. |
690 | login_invalid_otp | El flujo falla por cantidad de re-intentos en validación 2FA. |
689 | login_remaining_retries | El flujo falla por cantidad de re-intentos en la estrategia. |
688 | login_retry_again | El flujo falla por cantidad de re-intentos a nivel de login_challenge. |
Errores Generales:
Código | Valor | Descripción |
---|---|---|
1000 | cualquiera | Error no previsto por el SDK. |
699 | retrofit_http_error | Error de retrofit, con el envío de evidencias. |
298 | invalid_extra_values | Alguno de los valores enviados en la llamada al SDK no son válidos. |
297 | invalid_return_code | Cuando el return code de alguno de los flujos no es el correcto. |
1 | document_not_supported | El documento reconocido no es soportado para el flujo que se está realizando. |
2 | document_invalid | El documento reconocido no es válido para el flujo que se está realizando. |
4 | document_invalid_flow | El flujo que se quiere realizar no está soportado. |
5 | nfc_error | Existe un problema con el NFC del dispositivo. |
6 | front_camera_error_open | Existe un problema abriendo la cámara frontal del dispositivo. |
7 | front_camera_error_preview | Error creando la vista de la cámara. |
11 | delete_images_error | Error eliminando las imágenes del dispositivo. |
199 | fingerprint_reader_not_found | Error cuando se intenta realizar un flujo de Registor con huella sin un lecttor de huellas compatible conectado. |
198 | fingerprint_cancel_permission | Error que se da cuando el usuario cancela los permisos de acceso al lector de huellas. |
197 | fingerprint_opening_error | Error abriendo la conexión con el lector de huellas desde el SDK. |
196 | fingerprint_not_working_properly | El lector de huellas conectado no funciona correctamente. |
195 | fingerprint_error_getting_info | Error obteniendo la información necesaria desde el huellero. |
194 | fingerprint_error_ci_blocked | Error de cédula bloqueada. |
193 | fingerprint_error_access_error | Error solicitando los permisos del lector de huellas. |