[AIX][ MQ 9.4.0 Jun 2024][Linux]

Usando tokens de autenticação em um aplicativo

Grave seu aplicativo para fornecer um token de autenticação quando ele se conectar a um gerenciador de filas do IBM® MQ

Antes de Começar

No IBM MQ 9.4.0, os aplicativos podem fornecer um token de autenticação quando se conectam a um gerenciador de filas.

O pedido deve satisfazer os seguintes requisitos:
  • Ele deve ser gravado em C ou Java (usando o IBM MQ classes for JMS/ Jakarta Messaging)
  • Ele deve se conectar ao Gerenciador de Filas como um IBM MQ client Ou seja, o aplicativo deve se conectar ao gerenciador de filas em uma rede, em vez de usar ligações locais.
  • Ele deve se conectar a um gerenciador de filas executado em AIX® ou Linux®.
Se o aplicativo não atender a esses requisitos, a conexão falhará e o código de razão MQRC_FUNCTION_NOT_SUPPORTED (2298) será retornado ao aplicativo.

O aplicativo que fornece o token de autenticação pode executar em qualquer plataforma que suporte IBM MQ MQI clients.

Os clientes que usam a reconexão automática do cliente não podem fornecer um token de autenticação quando eles se conectam Se um aplicativo fornecer um token de autenticação e especificar a opção MQCNO_RECONNECT ou MQCNO_RECONNECT_Q_MGR na estrutura MQCNO, a conexão falhará e o código de razão MQRC_RECONNECT_INCOMPATÍVEL (2547) será retornado ao aplicativo. Para obter mais informações sobre reconexão automática do cliente, consulte Reconexão automática do cliente.

Se não for possível gravar o aplicativo para fornecer um token de autenticação devido a esses requisitos, será possível migrar seu aplicativo para usar tokens de autenticação usando uma saída de segurança do cliente. A saída de segurança do cliente pode ser gravada para configurar o token de autenticação na estrutura MQCSP.. Para obter mais informações sobre saídas de segurança, consulte Saídas de segurança em uma conexão do cliente.

A partir de IBM MQ 9.4.0, JMS os aplicativos cliente podem fornecer diretamente um token ao se conectarem (consulte Obtendo um token de autenticação do emissor de token escolhido). Antes do IBM MQ 9.4.0, os aplicativos Java podem fornecer um token indiretamente por meio de um programa de saída.. Para obter mais informações, consulte Classe Java MQCSP..

[ MQ 9.4.3 Jun 2025]Em IBM MQ 9.4.3, os aplicativos JMS podem configurar as propriedades da fábrica de conexões de modo que a biblioteca IBM MQ JMS recupere um token em nome do aplicativo de um provedor de token URL. O token é então enviado ao gerenciador de filas para autenticação. Isso também se aplica a clientes reconectáveis, ou seja, MQRC_RECONNECT_INCOMPATIBLE não é lançado se WMQ_CLIENT_RECONNECT_OPTIONS estiver definido como WMQ_CLIENT_RECONNECT ou WMQ_CLIENT_RECONNECT_Q_MGR.

[ MQ 9.4.5 de fevereiro de 2026]Observação: a partir de IBM MQ 9.4.5, você pode adicionar configurações personalizadas de SSLSocketFactory com a TOKEN_SSL_SOCKET_FACTORY propriedade para controlar como seu aplicativo recupera com segurança tokens JWT de pontos de extremidade HTTPS. Se um aplicativo cliente fornecer o TOKEN_SSL_SOCKET_FACTORY, a TOKEN_ENDPOINT propriedade tornar-se-á obrigatória e, se estiver ausente, uma mensagem de erro será retornada ao aplicativo cliente. Para obter mais informações, consulte Fornecendo um SSLSocketFactory personalizado em IBM MQ classes for JMS/Jakarta Messaging.

Sobre esta tarefa

Nota: um token de autenticação que está em conformidade com o padrão JSON Web Signature (JWS) é assinado para permitir que a autenticidade do token seja validada, mas não é criptografado. Portanto, ele pode ser lido e possivelmente reutilizado por qualquer pessoa que tenha acesso ao token. Configure a conexão para o gerenciador de filas para assegurar que o token de autenticação seja protegido usando criptografia quando for enviado pela rede, por exemplo, usando TLS. Para obter mais informações sobre as opções para proteger credenciais fornecidas por um aplicativo, consulte Proteção por senha MQCSP.
Antes de modificar os aplicativos para se conectarem usando um token, certifique-se de que:

Para fornecer um token de autenticação quando o aplicativo se conectar a um gerenciador de fila do IBM MQ , inclua o processo a seguir:

Procedimento

  • Para fornecer um token de autenticação de um aplicativo C (MQI):
    O aplicativo deve se conectar usando MQCONNX (em vez de MQCONN) e fornecer uma estrutura MQCSP :
    • O campo AuthenticationType deve ser configurado como MQCSP_AUTH_ID_TOKEN
    • A versão da estrutura deve ser configurada como MQCSP_VERSION_3
    • O campo TokenPtr ou TokenOffset deve fazer referência ao seu token de autenticação.
    • O campo TokenLength deve ser definido como o comprimento do token de autenticação.
    Código C de exemplo para se conectar a um gerenciador de filas usando MQCSP Versão 3 e token de autenticação:
    MQCNO cno = {MQCNO_DEFAULT};   /* Connection options  */
    MQCSP csp = {MQCSP_DEFAULT};   /* Security parameters */
    
    char  token[MQ_CSP_TOKEN_LENGTH +1] = {0};  /* Authentication token string */
    
    /* Set the connection options */
    cno.SecurityParmsPtr = &csp;
    cno.Version = MQCNO_VERSION_5;
    
    /* Set the security parameters */
    csp.Version = MQCSP_VERSION_3;
    csp.AuthenticationType = MQCSP_AUTH_ID_TOKEN;
    csp.TokenPtr = token;
    csp.TokenLength = (MQLONG) strlen(token);
    
    /* Connect to the queue manager */
    MQCONNX(qmName,                 /* Queue manager name  */
            &cno,                   /* Connection options  */
            &hCon,                  /* Connection handle   */
            &compCode,              /* Completion code     */
            &reason);               /* Reason code         */
  • Para fornecer um token de autenticação a partir de um aplicativo Java :
    Os aplicativos que usam IBM MQ classes for JMS/Jakarta Messaging podem fornecer um token por meio de qualquer um dos métodos createContextou createConnection , que recebem um nome de usuário e uma senha.
    Para fornecer um token de autenticação:
    • O UserID deve ser definido como nulo ou uma cadeia de caracteres vazia, ou seja, sem espaços, "".
    • O token é fornecido como a sequência Password ..
    Isso se aplica a todas as implementações de IBM MQ da interface ConnectionFactory

    Os formulários de parâmetro explícito, por exemplo, createContext(String userID, String password) podem ser usados ou as versões de parâmetro implícito, por exemplo, createContext().

    No último caso, o userID vazio e o Token Password devem ter sido fornecidos primeiro como propriedades no connection factory

    Exemplo de código Java para se conectar a um gerenciador de filas usando um token de autenticação:
    // Obtain token from authentication provider here:
    
    String myToken = "xxxxxxxxxxxxxxxx";
    
    // Acquire instance of an MQ connection Factory:
    
    JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
    
    JmsConnectionFactory cf = ff.createConnectionFactory();
    
    // Configure any required CF properties here - e.g. MQ Channel details
    
    // Connect to (and authenticate with) the queue manager:
    
    context = cf.createContext(null, myToken); // NOTE - null userID indicates token being provided
    Se a conexão falhar com o código de razão MQRC_NOT_AUTHORIZED (2035) ou MQRC_SECURITY_ERROR (2063), verifique o log de erro do gerenciador de filas para obter uma mensagem de erro contendo mais informações sobre a causa da falha. Para obter mais ajuda para diagnosticar problemas com tokens de autenticação, consulte Resolução de problemas de token de autenticação.
  • [ MQ 9.4.3 Jun 2025]Para fornecer um token de autenticação a partir de um Java aplicativo em que a IBM MQJMS biblioteca recupera um token em nome do aplicativo de um provedor de tokens URL :
    A definição da fábrica de conexões deve incluir os atributos TOKEN_CLIENT_ID e TOKEN_ENDPOINT e TOKEN_CLIENT_SECRET conforme mostrado no exemplo a seguir:
    Exemplo de código Java para se conectar a um gerenciador de filas usando um token de autenticação:
    // Acquire instance of an MQ connection Factory:
    JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
    
    JmsConnectionFactory cf = ff.createConnectionFactory();
    // Configure any required CF properties here
    cf.setStringProperty(WMQConstants.TOKEN_ENDPOINT, tokenEndpoint);
    cf.setStringProperty(WMQConstants.TOKEN_CLIENT_ID, clientId);
    cf.setStringProperty(WMQConstants.TOKEN_CLIENT_SECRET, clientSecret);
    context = cf.createContext();
    Se a conexão falhar com o código de razão MQRC_NOT_AUTHORIZED (2035) ou MQRC_SECURITY_ERROR (2063), verifique o log de erro do gerenciador de filas para obter uma mensagem de erro contendo mais informações sobre a causa da falha. Para obter mais ajuda para diagnosticar problemas com tokens de autenticação, consulte Resolução de problemas de token de autenticação.

Resultados

O aplicativo agora está conectado ao Gerenciador de Filas Ele permanece conectado até ser desconectado, mesmo se o token que foi usado para autenticar expirar. Se o aplicativo se desconectar do gerenciador de filas e precisar se reconectar, poderá ser necessário obter um novo token de autenticação com um tempo de expiração posterior antes que ele possa se reconectar