Compartir vía


Delegación de registros de usuario y suscripciones a producto

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

La delegación permite a su sitio web poseer los datos de usuario y realizar una validación personalizada para los usuarios del portal para desarrolladores. Con la delegación, puede controlar el inicio de sesión y el registro de desarrollador (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 iniciadas desde el portal para desarrolladores de API Management.

El flujo de trabajo final consta de estos pasos:

  1. El desarrollador hace clic en el vínculo de inicio de sesión o registro o en un vínculo de administración de cuentas 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 de un punto de conexión de delegación

  1. En Azure Portal, vaya a la instancia de API Management.

  2. En el menú de la barra lateral, en Portal para desarrolladores, seleccione Delegación.

  3. Seleccione la casilla Habilitar Delegación.

  4. Active la casilla para habilitar Delegar inicio de sesión y registro.

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

  5. Elija la dirección URL del punto de conexión de delegación especial y escríbala en el campo Punto de conexión de servicio de delegación .

  6. En Claves de delegación:

    • Genere la clave de validación principal o la clave de validación secundaria (o ambas) que usará el servicio de delegación para validar las solicitudes de API Management. Seleccione los puntos suspensivos (...) junto a cualquiera de las teclas y, a continuación, seleccione Regenerar.
    • Seleccione los puntos suspensivos (...) situados junto a cualquiera de las teclas y, a continuación, seleccione Copiar. Copie las claves en una ubicación segura y úselas al configurar el servicio de delegación.
  7. Haga clic en Guardar.

Sugerencia

Puede rotar y regenerar las claves de validación de delegación en cualquier momento. La rotación reemplaza la clave principal por la clave secundaria y vuelve a generar la clave secundaria. Después de guardar las claves, asegúrese de actualizar el servicio de delegación para usar las nuevas claves.

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

Para crear un nuevo punto de conexión de delegación que se va a implementar en el sitio, siga estos pasos:

  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
    operación 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.
    sal 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 consta de estos pasos:

  1. El desarrollador selecciona un producto en el portal para desarrolladores de API Management y selecciona el botón Suscribirse .
  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 pasos podrían incluir:
    • Redirigir a otra página para solicitar información de facturación.
    • Formulando más preguntas.
    • 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 , active la casilla Habilitar delegación y, a continuación, habilite Delegar suscripción de producto.

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

Para crear un nuevo punto de conexión de delegación para el sitio, siga estos pasos:

  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
    operación Identifica el tipo de solicitud de delegación. Las opciones de solicitud de suscripción de producto válidas 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.
    sal 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 muy recomendada para la 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, pase al siguiente paso. 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 donde el usuario ha clic en el vínculo de inicio de sesión o registro.

  • Tome la clave de validación de delegación, que se establece en la pantalla Delegación del portal de Azure.
  • Cree un HMAC que valide la firma y demuestre la validez del elemento proporcionado returnUrl.

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 Node.js 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.