Compartir a través de


Autenticación con espacios de nombres mediante tokens web JSON

En este artículo se muestra cómo autenticarse con el espacio de nombres de Azure Event Grid mediante tokens web JSON.

MQTT broker de Azure Event Grid admite la autenticación JWT personalizada, que permite a los clientes conectarse y autenticarse con un espacio de nombres de Event Grid mediante tokens web JSON emitidos por cualquier proveedor de identidades, además de Microsoft Entra ID.

Requisitos previos

Para usar la autenticación JWT personalizada para los espacios de nombres, necesita tener los siguientes requisitos previos:

  • Proveedor de identidades que pueda emitir tokens web JSON.
  • Certificado de entidad de certificación que incluya las claves públicas usadas para validar los tokens del cliente.
  • Cuenta de Azure Key Vault para hospedar el certificado de entidad de certificación que incluye las claves públicas.

Pasos generales

Para usar la autenticación JWT personalizada para los espacios de nombres, siga estos pasos:

  1. Cree un espacio de nombres y configure sus subrecursos.
  2. Habilite la identidad administrada en el espacio de nombres de Event Grid.
  3. Cree una cuenta de Azure Key Vault que hospede el certificado CA que incluya las claves públicas.
  4. Agregue la asignación de roles en Azure Key Vault para la identidad administrada del espacio de nombres.
  5. Configuración de la autenticación personalizada en el espacio de nombres de Event Grid
  6. Los clientes pueden conectarse al espacio de nombres de Event Grid mediante los tokens proporcionados por el proveedor de identidades.

Cree un espacio de nombres y configure sus subrecursos

Siga las instrucciones de Inicio rápido: Publicación y suscripción a mensajes MQTT en el espacio de nombres de Event Grid con Azure Portal para crear un espacio de nombres y configurar sus subrecursos. Omita los pasos de creación de certificados y clientes, ya que las identidades del cliente proceden del token proporcionado. Los atributos de cliente se basan en las notificaciones personalizadas del token de cliente. Los atributos de cliente se usan en la consulta del grupo de clientes, las variables de plantilla de tema y la configuración de enriquecimiento de enrutamiento.

Habilitación de la identidad administrada en el espacio de nombres de Event Grid

El espacio de nombres usa la identidad administrada para acceder a la instancia de Azure Key Vault para obtener el certificado de servidor del dominio personalizado. Use el siguiente comando para habilitar la identidad administrada asignada por el sistema en el espacio de nombres de Event Grid:

az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}" 

Para obtener información sobre cómo configurar identidades asignadas por el sistema y el usuario mediante Azure Portal, vea Habilitación de la identidad administrada para un espacio de nombres de Event Grid.

Creación de una cuenta de Azure Key Vault y carga del certificado de servidor

  1. Use el comando siguiente para crear una cuenta de Azure Key Vault:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  2. Use el siguiente comando para importar un certificado en Azure Key Vault

    az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> " 
    

    Nota:

    El certificado debe incluir el nombre de dominio en el nombre alternativo del firmante para DNS. Para más información, vea Tutorial: Importación de un certificado en Azure Key Vault.

Adición de la asignación de roles en Azure Key Vault para la identidad administrada del espacio de nombres

Debe proporcionar acceso al espacio de nombres para acceder a la cuenta de Azure Key Vault mediante los pasos siguientes:

  1. Obtención del identificador de entidad de seguridad de identidad administrada del sistema del espacio de nombres de Event Grid mediante el comando siguiente

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Obtenga el identificador de recurso de Azure Key Vault.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Agregue la asignación de roles en Key Vault para la identidad administrada del espacio de nombres.

    az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId 
    

    Para más información sobre el acceso a Key Vault y la experiencia del portal, vea Proporcionar acceso a claves, certificados y secretos de Key Vault con un control de acceso basado en rol de Azure.

Configuración de la autenticación personalizada en el espacio de nombres de Event Grid

En este paso, configurará las opciones de autenticación personalizadas en el espacio de nombres de Event Grid mediante Azure Portal y la CLI de Azure. Primero debe crear el espacio de nombres y actualizarlo mediante los pasos siguientes.

Usar Azure Portal

  1. Vaya al espacio de nombres de Event Grid en Azure Portal.

  2. En la página Espacio de nombres de Event Grid, seleccione Configuración en el menú de la izquierda.

  3. En la sección Autenticación JWT personalizada, especifique valores para las siguientes propiedades:

    1. Seleccione Habilitar autenticación JWT personalizada.

    2. Emisor de tokens: escriba el valor de las notificaciones del emisor de los tokens JWT, presentados por los clientes MQTT.

    3. Seleccione Agregar certificado de emisor

      Captura de pantalla que muestra la sección Autenticación JWT personalizada de la página Configuración de un espacio de nombres de Event Grid.

    4. En la nueva página, especifique los valores de las siguientes propiedades.

      1. Dirección URL del certificado: el identificador de certificado del certificado de emisor en Azure Key Vault que creó. Puede elegir Seleccionar un certificado mediante un almacén de claves en su lugar para seleccionar el certificado y el almacén de claves de las suscripciones.

      2. Identidad: la identidad que se usa para autenticarse con Key Vault para acceder al certificado de emisor que se creó.

      3. Seleccione Agregar.

        Captura de pantalla que muestra la página Agregar certificado de emisor.

  4. De nuevo en la página Configuración, seleccione Aplicar.

    Nota:

    Puede agregar hasta dos iss certificados con fines de rotación de clave/certificado.

Uso de CLI de Azure

Use el comando siguiente para actualizar el espacio de nombres con la configuración de autenticación JWT personalizada.

az resource update --resource-type Microsoft.EventGrid/namespaces --api-version 2024-06-01-preview --ids /subscriptions/69f9e5ac-ca07-42cc-98d2-4718d033bcc5/resourceGroups/dummy-cd-test/providers/Microsoft.EventGrid/namespaces/dummy-cd-test2 --set properties.topicSpacesConfiguration.clientAuthentication='{\"customJwtAuthentication\":{\"tokenIssuer\":\"dmpypin-issuer\",\"issuerCertificates\":[{\"certificateUrl\":\"https://dummyCert-cd-test.vault.azure.net/certificates/dummy-cd-test/4f844b284afd487e9bba0831191087br1\",\"identity\":{\"type\":\"SystemAssigned\"}}]}}' 

Formato JSON Web Token

Los tokens web JSON se dividen en las secciones Encabezado JWT y Carga de JWT.

Encabezado del JWT

El encabezado debe contener al menos campos typ y alg. typ debe ser siempre JWS y alg debe ser siempre RS256. El encabezado del token debe ser el siguiente:

{
    "typ": "JWT",
    "alg": "RS256"
}

Carga de JWT

Event Grid requiere las siguientes notificaciones: iss, sub, aud, exp, nbf.

Nombre Descripción
iss Emisor. El valor de JWT debe coincidir con el emisor en la configuración del espacio de nombres de Event Grid para la autenticación JWT personalizada.
sub Asunto. El valor se usa como nombre de identidad de autenticación.
aud Audiencia. El valor puede ser una cadena o una matriz de cadenas. El valor debe contener un nombre de host de espacio de nombres de Event Grid estándar o un dominio personalizado para ese espacio de nombres de Event Grid (si está configurado). La audiencia puede contener otras cadenas, pero es necesario que al menos una de estas cadenas sea un nombre de host de espacio de nombres de Event Grid estándar o un dominio personalizado para este espacio de nombres.
exp Expiration. Hora de Unix en la que expira JWT.
nbf No antes. Hora de unidad en la que JWT pasa a ser válido.

Event Grid asigna todas las notificaciones a los atributos de cliente si tienen uno de los siguientes tipos: int32, string, array of strings. Las notificaciones estándar iss, sub, aud, exp, nbf se excluyen de los atributos de cliente. En el siguiente ejemplo de JWT, solo se convierten tres notificaciones en atributos de cliente, num_attr, str_attr, str_list_attr, porque tienen tipos correctos int32, string, array of strings. incorrect_attr_1, incorrect_attr_2, incorrect_attr_3 no se convierten en atributos de cliente, porque tienen tipos incorrectos: float, array of integers, object.

{
    "iss": "correct_issuer",
    "sub": "d1",
    "aud": "testns.mqtt-broker-int.azure.net",
    "exp": 1712876224,
    "nbf": 1712869024,
    "num_attr": 1,
    "str_attr": "some string",
    "str_list_attr": [
        "string 1",
        "string 2"
    ],
    "incorrect_attr_1": 1.23,
    "incorrect_attr_2": [
        1,
        2,
        3
    ],
    "incorrect_attr_3": {
        "field": "value"
    }
}