Delegación de registros de usuario y suscripciones a producto

SE APLICA A: Desarrollador | Básico | Estándar | Premium

La delegación permite que su sitio web se apropie de los datos del usuario y realice una validación personalizada. Con la delegación, puede controlar el inicio de sesión o el registro de desarrolladores (y las operaciones de administración de cuentas relacionadas) y la suscripción de productos mediante el sitio web existente, en lugar de la funcionalidad integrada del portal para desarrolladores.

Delegación de inicios de sesión y suscripciones de desarrolladores

Para delegar las opciones de inicio de sesión y registro de desarrolladores y de administración de cuentas de desarrolladores en su sitio web existente, cree un punto de conexión de delegación especial en su sitio. Esta delegación especial actúa como punto de entrada para cualquier inicio de sesión o registro, y solicitudes relacionadas desde el portal para desarrolladores de API Management.

El flujo de trabajo final será el siguiente:

  1. El desarrollador hace clic en el vínculo de inicio de sesión o registro, o un vínculo de administración de cuenta, que se encuentra en el portal para desarrolladores de API Management.
  2. El explorador se redirige al extremo de delegación.
  3. El punto de conexión de delegación, en cambio, redirige al usuario o presenta al usuario el inicio de sesión o el registro, o la interfaz de usuario de administración.
  4. Después de que finaliza la operación, se redirige al usuario al portal para desarrolladores de API Management en la ubicación que ha dejado.

Configuración de API Management para enrutar solicitudes a través del punto de conexión de delegación

  1. En Azure Portal, busque Portal para desarrolladores en su recurso de API Management.

  2. Haga clic en la opción Delegación.

  3. Haga clic en la casilla para activar "Delegar inicio de sesión y suscripción".

    Captura de pantalla que muestra la delegación del inicio de sesión y el registro en el portal.

  4. Determine la URL del extremo especial de delegación y escríbala en el campo Dirección URL del extremo de delegación.

  5. En el campo Clave de validación de delegación haga lo siguiente:

    • Escriba un secreto usado para calcular una firma proporcionada para comprobar que la solicitud se origina en API Management.
    • Haga clic en el botón Generar para que API Management genere una clave aleatoria.
  6. Haga clic en Guardar.

Creación del punto de conexión de delegación

Pasos recomendados para crear un nuevo punto de conexión de delegación que se implementará en el sitio:

  1. Recibe una solicitud en el siguiente formulario, en función de la operación:

    http://www.yourwebsite.com/apimdelegation?operation={operation}& returnUrl={URL de la página de origen}&salt={string}&sig={string}

    O bien:

    http://www.yourwebsite.com/apimdelegation?operation={operation}& userId={id. de usuario de la cuenta}&salt={string}&sig={string}

    Parámetros de consulta:

    Parámetro Descripción
    operation Identifica el tipo de solicitud de delegación. Operaciones disponibles: SignIn, SignUp, ChangePassword, ChangeProfile, CloseAccount y SignOut.
    returnUrl En SignIn o SignUp, la dirección URL en la que el usuario hizo clic en un vínculo de inicio de sesión o registro.
    userId En ChangePassword, ChangeProfile, CloseAccount y SignOut, el id. de usuario de la cuenta que desea administrar.
    salt Una cadena salt especial que se usa para procesar un hash de seguridad.
    sig Un hash de seguridad procesado que se comparará con su propio hash procesado.
  2. Compruebe que la solicitud procede de Azure API Management (opcional, pero especialmente recomendado por motivos de seguridad).

    • Procese un hash HMAC-SHA512 de una cadena según los parámetros de consulta returnUrl (o UserId) y salt. Para obtener más detalles, consulte este código de ejemplo.

      Para SignIn y SignUp:

      HMAC(salt + '\n' + returnUrl)
      

      Para ChangePassword, ChangeProfile, CloseAccount y SignOut:

      HMAC(salt + '\n' + userId)
      
    • Compare el hash procesado anteriormente con el valor del parámetro de consulta sig . Si los dos hashes coinciden, vaya a paso siguiente. De lo contrario, deniegue la solicitud.

  3. Compruebe que recibe una solicitud de una operación de administración de cuentas o de inicio de sesión o registro.

  4. Presente al usuario la interfaz de usuario de administración de cuentas o de inicio de sesión o registro.

  5. Después de completar la operación por su parte, administre el usuario en API Management. Por ejemplo, si el usuario se registra y crea una cuenta correspondiente para sí mismo en API Management.

    • Cree un usuario con la API de REST de API Management.
    • Establezca el identificador de usuario en el mismo valor en el almacén de usuarios o en un nuevo id. de seguimiento sencillo.
  6. Después del inicio de sesión o registro, cuando el usuario se autentique correctamente:

    • Solicite un token de acceso compartido a través de la API de REST de API Management.

    • Anexe un parámetro de consulta returnUrl a la URL de SSO que se recibió de la llamada de API anterior. Por ejemplo:

      https://contoso.developer.azure-api.net/signin-sso?token=<URL-encoded token>&returnUrl=%2Freturn%2Furl

    • Redirija al usuario a la URL producida anteriormente.

Delegación de suscripciones a productos

La delegación de una suscripción a productos funciona de forma similar a la delegación de inicio de sesión y suscripción de usuario. El flujo de trabajo final sería el siguiente:

  1. El desarrollador selecciona un producto en el portal para desarrolladores de API Management y hace clic en el botón Suscribir.
  2. El explorador se redirige al extremo de delegación.
  3. El extremo de delegación realiza los pasos necesarios para la suscripción al producto que usted diseña. Estos pueden incluir lo siguiente:
    • Redirigir a otra página para solicitar información de facturación.
    • Hacer preguntas adicionales.
    • Almacenar la información y no requerir ninguna acción del usuario.

Habilitación de la API de REST de API Management

En la página Delegación, haga clic en Delegar suscripción de productos.

Creación del punto de conexión de delegación

Pasos recomendados para crear un nuevo punto de conexión de delegación que se implementará en el sitio:

  1. Reciba una solicitud en el siguiente formulario, en función de la operación.

    http://www.yourwebsite.com/apimdelegation?operation={operation}&productId={producto para suscribirse} userId={ususario que realiza la solicitud} salt={string} sig={string}

    O bien:

    http://www.yourwebsite.com/apimdelegation?operation={operation}&subscriptionId={suscripción por administrar} salt={string} sig={string}

    Parámetros de consulta:

    Parámetro Descripción
    operation Identifica el tipo de solicitud de delegación. Las opciones válidas de solicitudes de suscripción a producto son:
    • Subscribe: una solicitud para suscribir al usuario a un producto determinado con el id. especificado (consulte más información a continuación).
    • Cancelar la suscripción: una solicitud para cancelar la suscripción de un usuario a un producto
    productId En Subscribe, el id. del producto al que el usuario solicitó la suscripción.
    userId En Subscribe, el id. del usuario que realiza la solicitud.
    subscriptionId En cancelar la suscripción, el id. de suscripción del producto.
    salt Una cadena salt especial que se usa para procesar un hash de seguridad.
    sig Un hash de seguridad procesado que se comparará con su propio hash procesado.
  2. Compruebe que la solicitud procede de Azure API Management (opcional, pero especialmente recomendado por motivos de seguridad).

    • Procesar un hash HMAC-SHA512 de una cadena en función de los parámetros de consulta productId y userId (o subscriptionId) y salt:

      Para Suscribirse:

      HMAC(salt + '\n' + productId + '\n' + userId)
      

      Para cancelar la suscripción:

      HMAC(salt + '\n' + subscriptionId)
      
    • Compare el hash procesado anteriormente con el valor del parámetro de consulta sig . Si los dos hashes coinciden, vaya a paso siguiente. De lo contrario, deniegue la solicitud.

  3. Procese cualquier suscripción a producto en función del tipo de operación solicitada en operation; por ejemplo, facturación, preguntas adicionales, etc.

  4. Después de completar la operación en el lado, administre la suscripción en API Management. Por ejemplo, suscriba al usuario al producto de API Management llamando a la API de REST para suscripciones.

Ejemplo de código

Estos ejemplos de código muestran cómo generar el hash del parámetro de consulta returnUrl al delegar el inicio de sesión de usuario o el registro. returnUrl es la dirección URL de la página en la que el usuario hizo clic en un vínculo de inicio de sesión o registro.

  • Tomar la clave de validación de delegación, que se establece en la pantalla de delegación de Azure Portal.
  • Crear un HMAC que valida la firma, probando la validez del valor de returnUrl que se pasó.

Con ligera modificación, puede usar el mismo código para calcular otros hashes, como con productId y userId al delegar la suscripción del producto.

Código C# para generar el hash de returnUrl

using System.Security.Cryptography;

string key = "delegation validation key";
string returnUrl = "returnUrl query parameter";
string salt = "salt query parameter";
string signature;
using (var encoder = new HMACSHA512(Convert.FromBase64String(key)))
{
    signature = Convert.ToBase64String(encoder.ComputeHash(Encoding.UTF8.GetBytes(salt + "\n" + returnUrl)));
    // change to (salt + "\n" + productId + "\n" + userId) when delegating product subscription
    // compare signature to sig query parameter
}

Código NodeJS para generar el hash de returnUrl

var crypto = require('crypto');

var key = 'delegation validation key'; 
var returnUrl = 'returnUrl query parameter';
var salt = 'salt query parameter';

var hmac = crypto.createHmac('sha512', new Buffer(key, 'base64'));
var digest = hmac.update(salt + '\n' + returnUrl).digest();
// change to (salt + "\n" + productId + "\n" + userId) when delegating product subscription
// compare signature to sig query parameter

var signature = digest.toString('base64');

Importante

Debe volver a publicar el portal para desarrolladores para que los cambios en la delegación surtan efecto.

Pasos siguientes