Verificación de identidad
Aprenda a utilizar la verificación de identidad para garantizar que solo los usuarios que usted verifique puedan acceder a sus experiencias Appcues .
Introducción
La verificación de identidad le permite firmar digitalmente el ID de usuario enviado a Appcues al identificar a los usuarios, garantizando así que solo los usuarios que usted verifica puedan acceder a sus experiencias Appcues . Implementar la verificación de identidad garantiza que terceros no puedan hacerse pasar por otros usuarios y acceder a experiencias Appcues no destinadas a ellos.
La implementación de la verificación de identidad requiere que uno de sus desarrolladores realice tres pasos:
- Agregue código al backend de su producto para generar una firma para cualquier ID de usuario y proporcionar esa firma al SDK de JavaScript Appcues y/o a los SDK móviles.
- Pruebe y verifique que se proporcionen firmas válidas al realizar llamadas al SDK Appcues , en todos sus sitios web o aplicaciones móviles que usan Appcues .
- Una vez verificado, puede aplicar la verificación de identidad habilitando el Modo de cumplimiento para rechazar cualquier llamada de Appcues SDK que no contenga firmas válidas.
¡Eso es todo!
Para configurar la verificación de identidad (desarrolladores)
Como desarrollador de software de su producto, necesitará:
- Genere una firma de ID de usuario en su servidor backend. El SDK Appcues usará esta firma para verificar que los usuarios solo puedan ver el contenido destinado a su ID de usuario.
- Entregue esa firma de ID de usuario a su sitio web o aplicación móvil.
- Proporcione la firma de UserID antes de realizar cualquier llamada al SDK Appcues siguiendo las instrucciones a continuación.
Generando la firma UserID
Agregue el código apropiado al servidor back-end de su producto utilizando uno de los ejemplos de código back-end en la parte inferior de esta página como guía.
Una vez generada la firma, debe proporcionarla de forma segura al SDK Appcues en su aplicación web o móvil, o al usar la API HTTP Appcues o el Launchpad Appcues , como se describe a continuación. Si su producto utiliza renderizado de páginas del lado del servidor, debe incrustar la firma en la página que se entrega al navegador. De lo contrario, realice una llamada API autenticada a su servidor backend para recuperar la firma.
De forma predeterminada, las firmas son válidas durante 15 minutos después de su generación. Si tiene una aplicación web o móvil de una sola página de larga duración, esto podría provocar que las llamadas al SDK fallen después de 15 minutos. Si su aplicación debe realizar llamadas al SDK Appcues más de 15 minutos después de obtener una firma válida, puede:
- Cambie el tiempo a más de 15 minutos en el ejemplo de código apropiado que se proporciona a continuación
- Solicitar una firma actualizada de su servidor backend
Establezca la firma antes de realizar llamadas al SDK Appcues
Es importante proporcionar la firma antes de realizar cualquier llamada al SDK Appcues . Si el Modo de Forzado está habilitado mientras se realizan llamadas a Appcues .track()
, Appcues .page()
o cualquier otro método del SDK Appcues antes de proporcionar una firma, no se enviarán datos a los servidores de Appcues y no se mostrarán las experiencias. Una vez establecida una firma válida, se enviarán datos a los servidores de Appcues para validar y mostrar las experiencias Appcues . Si la firma nunca se establece y el Modo de Forzado está activado, el usuario no verá las experiencias Appcues en ninguna aplicación móvil o web que utilice el SDK Appcues para esa cuenta.
Nota: Se producirá un comportamiento diferente cuando el Modo de cumplimiento esté desactivado (predeterminado), como se describe en la sección Prueba de verificación de identidad a continuación.
Nota: Si se utiliza Segment.io , la firma también debe especificarse antes de llamar a Segment.
Proporcionar la firma al SDK de Javascript Appcues
El proceso es el mismo si Appcues se instala directamente o a través de Segment, Rudderstack o cualquier otra herramienta de terceros.
Asignar la firma de ID de usuario a window. Appcues Settings.userIdSignature
de la siguiente manera.
// retain any Appcues SDK settings that may have been set prior
if (window.AppcuesSettings) {
window.AppcuesSettings.userIdSignature = signature;
} else {
window.AppcuesSettings = { userIdSignature: signature };
}
// Your Appcues.identify() call, or equivalent call for Segment, Rudderstack, etc. goes below
Proporcionar la firma al SDK móvil Appcues
Pase una propiedad de usuario llamada appcues:user_id_signature
en la llamada identify(userId, props)
. Tenga en cuenta que esto requiere la versión >= 1.4.0
del SDK móvil Appcues .
# Android / Kotlin
appcues.identify(userId, mapOf("appcues:user_id_signature" to signature))
# iOS / Swift
appcues.identify(userID: userID, properties: ["appcues:user_id_signature": signature])
Proporcionar la firma al Launchpad Appcues
Si utiliza la instalación personalizada Appcues Launchpad, debe proporcionar la firma como se describe en la sección "Encabezados de solicitud" de la documentación de la instalación personalizada Appcues Launchpad . Nota: Si utiliza la instalación estándar (no personalizada) de Launchpad, no necesita proporcionar la firma.
Prueba de verificación de identidad
Mientras el modo de cumplimiento esté deshabilitado (predeterminado), se producirá el siguiente comportamiento:
Consulte la siguiente sección “Aplicación de la verificación de identidad” para saber qué sucede cuando el modo de aplicación está habilitado.
- Si no se proporciona ninguna firma al SDK O se proporciona una firma válida al SDK:
- Las llamadas al SDK funcionarán y las experiencias se mostrarán a los usuarios según la configuración de segmentación de sus flujos Appcues y otras experiencias.
- Si se proporciona una firma no válida al SDK:
- Las llamadas al SDK fallarán y las experiencias no se mostrarán a los usuarios. Asegúrese de que la firma proporcionada al SDK sea válida según las instrucciones de "Generar la firma de UserID".
Para probar localmente aplicaciones web si falta la firma mientras el modo de cumplimiento está deshabilitado:
Si el Modo de Aplicación está deshabilitado (predeterminado) y no proporciona una firma, el usuario seguirá viendo las experiencias Appcues . Para probar este escenario localmente con aplicaciones web, agregue la siguiente línea de código antes de su primera llamada al SDK de JavaScript Appcues .
// Allow testing Identity Verification locally with console messages
window.APPCUES_TEST_IDENTITY_VERIFICATION = true;
Cuando window.APPCUES_TEST_IDENTITY_VERIFICATION = true
verá uno de los siguientes mensajes en la consola de JavaScript, después de cada llamada al SDK Appcues .
-
Appcues Identity Verification Testing: Successfully sent update to API using User ID Signature
- Este mensaje de consola significa que se proporcionó una firma válida antes de una llamada al SDK
-
Appcues Identity Verification Testing: Failed to send update to API - verification failure: No User ID Signature present
- Este mensaje de consola significa que no se proporcionó una firma antes de realizar una llamada al SDK Appcues y no se mostró una experiencia.
-
Appcues Identity Verification Testing: Failed to send update to API - verification failure: Invalid User ID Signature NNNN
- Este mensaje de consola indica que se proporcionó una firma no válida. Verifique que la firma sea válida según las instrucciones de "Generar la firma de ID de usuario".
Importante : después de realizar la prueba, asegúrese de eliminar la declaración window.APPCUES_TEST_IDENTITY_VERIFICATION = true
antes de implementar su aplicación en producción para no mostrar estos mensajes de registro en la consola JavaScript de su usuario.
Aplicación de la verificación de identidad
Una vez que se completen las pruebas en todas las aplicaciones web y móviles que usan el SDK Appcues con su cuenta Appcues , puede habilitar el Modo de cumplimiento para mostrar las experiencias Appcues solo a los usuarios con una firma válida.
Importante: Activar el Modo de Obligación en tu cuenta afecta a todas tus aplicaciones móviles o web. No lo actives hasta que hayas probado tanto tus aplicaciones móviles como web y te hayas asegurado de que todos tus usuarios finales estén usando una versión que realice correctamente la verificación de identidad, como se describió anteriormente. En el caso de las aplicaciones móviles, después de publicar una versión de tu aplicación en la tienda con verificación de identidad, deberás adaptar los flujos de Appcues a versiones de la aplicación iguales o superiores a esta nueva versión, o exigir a tus usuarios que actualicen sus aplicaciones a la última versión para que puedan seguir usándolas. Debes planificar activar el Modo de Obligación en tu cuenta solo después de que los usuarios de tus aplicaciones hayan tenido la oportunidad de actualizar a esta versión obligatoria.
Una vez habilitado el Modo de Aplicación, se producirá el siguiente comportamiento en todas las aplicaciones móviles y web que utilicen el SDK Appcues en su cuenta. Consulte la sección anterior para saber qué ocurre cuando se deshabilita el Modo de Aplicación:
- Si se proporciona una firma válida al SDK:
- Las llamadas al SDK funcionarán y las experiencias se mostrarán a los usuarios según la configuración de segmentación de sus flujos Appcues y otras experiencias.
- Si no se proporciona ninguna firma al SDK O se proporciona una firma no válida al SDK:
- Las llamadas al SDK fallarán y las experiencias no se mostrarán a los usuarios. Asegúrese de que la firma proporcionada al SDK sea válida según las instrucciones de "Generar la firma de UserID".
Para habilitar el modo de cumplimiento:
- Obtén una clave API y un secreto API para tu cuenta Appcues . Si eres administrador Appcues , puedes generar una clave API y crear un secreto desde la página de configuración de claves API . Para más información sobre cómo usar nuestra API para controlar la verificación de identidad, consulta la página de claves de autenticación del SDK de la API pública .
- Habilite el modo de cumplimiento con el siguiente comando
curl
. ReemplaceACCOUNT_ID
con el ID de su cuenta y API_KEY y API_SECRET con los valores del paso 1.
curl <https://api.appcues.com/v2/accounts/ACCOUNT_ID/enforcement_mode/enable> \\
-u API_KEY:API_SECRET \\
-d ''
- Realice una comprobación final de todas sus aplicaciones web y móviles que usan el SDK Appcues con su cuenta para verificar que las experiencias Appcues se muestren correctamente, según la configuración de segmentación de su experiencia. Las experiencias Appcues deberían mostrar si se siguieron los pasos de la sección "Probar la verificación de identidad". ¡Listo!
Si sus experiencias Appcues no aparecen como esperaba, no se preocupe, simplemente desactive el modo de cumplimiento.
Para desactivar el modo de cumplimiento:
Cambie enable
a disable
en el comando, como se muestra a continuación. Reemplace ACCOUNT_ID
con el ID de su cuenta y API_KEY y API_SECRET con los valores que usó al habilitarlo, como se describió anteriormente.
curl <https://api.appcues.com/v2/accounts/ACCOUNT_ID/enforcement_mode/disable> \\
-u API_KEY:API_SECRET \\
-d ''
Importante: La clave API y el secreto de API generados en el panel de control de su cuenta son independientes de la clave de autenticación del SDK utilizada para generar la firma del ID de usuario. El par clave/secreto se utiliza para interactuar con nuestra API pública, lo que le permite habilitar o deshabilitar el modo de cumplimiento. La API pública también proporciona puntos finales para generar una clave de autenticación del SDK independiente, específica para la verificación de identidad. Esta clave del SDK se utiliza en el siguiente código para generar las firmas de ID de usuario de sus usuarios.
Ejemplos de código para generar una firma de ID de usuario
Cada muestra de código requiere la siguiente información para generar una firma válida por 15 minutos.
- Su ID de cuenta : se puede encontrar en Appcues Studio en la pestaña Configuración > Cuenta
- El ID de usuario del usuario actual : el mismo ID de usuario proporcionado a la llamada de identidad Appcues
- Un secreto de las claves de autenticación del SDK de la API pública de Appcues . IMPORTANTE: Es fundamental mantener la confidencialidad del secreto y no en el código JavaScript del cliente. Revelar el secreto permitiría a un hacker suplantar la identidad de otro usuario y acceder a sus experiencias Appcues . Tenga en cuenta que la clave de autenticación del SDK es independiente de la clave de API y del secreto generados a través del panel de control de su cuenta de Appcues .
Si el backend de su producto utiliza un idioma diferente a los que se enumeran a continuación, comuníquese con el soporte Appcues para obtener ayuda.
DO#
Usando la biblioteca Jose-jwt
using System;
using System.Collections.Generic;
using Jose;
using System.Text;
static class AppcuesSignature
{
public static string CreateToken(string userId, string accountId, byte[] secretKey)
{
var payload = new Dictionary<string, object> {
{ "iss", accountId },
{ "sub", userId },
{ "exp", DateTimeOffset.UtcNow.AddMinutes(15).ToUnixTimeSeconds() }
};
return Jose.JWT.Encode(payload, secretKey, Jose.JwsAlgorithm.HS256);
}
}
Elixir
Usando la biblioteca Joken
@spec create_token(binary(), binary(), binary()) :: nil | binary()
def create_token(account_id, user_id, sdk_secret)
expiry = (Timex.now() |> Timex.to_unix()) + (1 * 60 * 60)
claims = %{
"iss" => account_id,
"sub" => user_id,
"exp" => expiry # The timestamp when this JWT should expire
}
signer = Joken.Signer.create("HS256", sdk_secret)
case Joken.encode_and_sign(claims, signer) do
{:ok, token, _} -> token
{:error, _} -> nil
end
end
Ir
Usando la biblioteca github.com/dgrijalva/jwt-go
import (
"github.com/dgrijalva/jwt-go"
"time"
)
func CreateToken(accountID string, userID string, secretKey []byte) (string, error) {
// Create the Claims
claims := jwt.StandardClaims{
Issuer: accountID,
Subject: userID,
ExpiresAt: time.Now().Add(time.Minute * 15).Unix(),
}
// Create the token
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
// Sign and get the complete encoded token as a string
return token.SignedString(secretKey)
}
Javascript
Usando la biblioteca Jose
const jose = require("jose");
function createToken(account_id, user_id, secretKey) {
const secret = new TextEncoder().encode(secretKey);
const signature = new jose.SignJWT({})
.setProtectedHeader({ alg: 'HS256' })
.setIssuer(account_id)
.setSubject(user_id)
.setExpirationTime('1h')
.sign(secret);
return signature; // returns a promise
}
Java
Uso de la biblioteca auth0-jwt
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.JWT;
import java.util.Date;
class AppcuesSignature {
public static String CreateToken(String accountId, String userId, byte[] secret) {
Algorithm algorithm = Algorithm.HMAC256(secret);
String token = JWT.create()
.withIssuer(accountId)
.withSubject(userId)
.withExpiresAt(new Date(System.currentTimeMillis() + 15 * 60 * 1000))
.sign(algorithm);
return token;
}
}
PHP
Usando la biblioteca php-jwt
use \\Firebase\\JWT\\JWT;
function create_token($user_id, $account_id, $secret_key) {
$payload = array(
"iss" => $account_id,
"sub" => $user_id,
"exp" => time() + 15 * 60
);
$jwt = JWT::encode($payload, $secret_key, 'HS256');
return $jwt;
}
Pitón
Usando la biblioteca PyJWT
import jwt
import datetime
def create_token(account_id, user_id, secret_key):
# Create the Claims
claims = {
'iss': account_id,
'sub': user_id,
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=15)
}
# Create the token
token = jwt.encode(claims, secret_key, algorithm='HS256')
# Sign and get the complete encoded token as a string
return token
Rubí
Uso de la biblioteca ruby-jwt
require 'jwt'
def create_token(user_id, account_id, secret_key)
claims = {
iss: account_id,
sub: user_id,
exp: Time.now.to_i + 15 * 60
}
JWT.encode(claims, secret_key, 'HS256')
end