es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Objetivo-C Codificar JWT RS256 con clave privada

Estoy utilizando openssl para generar un par de claves rsa con el siguiente comando:

openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out public.crt

Luego estoy usando esta biblioteca para codificar un JWT RS256: https://github.com/yourkarma/JWT
con la clave “private.key” que generé antes.

Pero falló con este error:

Error Domain=NSOSStatusErrorDomain Code=-50 "Error en la creación de la clave privada RSA a partir de los datos" UserInfo={numberOfErrorsDeep=0, NSDescription=Error en la creación de la clave privada RSA a partir de los datos}

Aquí está el código de ejemplo que estoy usando:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"private" ofType:@"key"];
NSString *key = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

key = [[key componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@""];
key = [key stringByReplacingOccurrencesOfString:@"-----BEGIN PRIVATE KEY-----" withString:@""];
key = [key stringByReplacingOccurrencesOfString:@"-----END PRIVATE KEY-----" withString:@""];
key = [key stringByReplacingOccurrencesOfString:@"-----BEGIN RSA PRIVATE KEY-----" withString:@""];
key = [key stringByReplacingOccurrencesOfString:@"-----END RSA PRIVATE KEY-----" withString:@""];

NSDictionary *payload = @{@"payload" : @"hidden_information"};

id <jwtalgorithmdataholderprotocol> signDataHolder = [JWTAlgorithmRSFamilyDataHolder new]
        .keyExtractorType([JWTCryptoKeyExtractor privateKeyWithPEMBase64].type)
        .algorithmName(JWTAlgorithmNameRS256).secret(key);

JWTCodingResultType *result = [JWTEncodingBuilder encodePayload:payload]
    .addHolder(signDataHolder)
    .result;

NSString *token = result.successResult.encoded;
NSError *error = result.errorResult.error;

¿Alguien podría ayudarme, por favor?
Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que podría haber un problema con la clave privada generada por openssl. Esto podría deberse a que la clave está en un formato incorrecto, o podría haber otros problemas con la propia clave.

    Al examinar el código de ejemplo, parece que la clave se lee desde un archivo y luego se procesa para eliminar las secciones de encabezado y pie. Esto podría ser una fuente potencial de errores, especialmente si el formato de la clave no es correcto.

    Para solucionar el problema, podría intentar lo siguiente:

    1. Verificar que la clave privada generada por openssl sea correcta y esté en el formato correcto. Puede probar esto utilizando la clave para firmar algunos datos de prueba utilizando comandos de openssl y luego verificar la firma utilizando la clave pública correspondiente.
    2. Verificar si la aplicación de iOS tiene acceso de lectura al archivo que contiene la clave privada. Asegúrese de que el archivo esté incluido en el paquete de la aplicación y de que la ruta sea correcta.

    3. Verificar si la clave se está procesando correctamente y si la cadena resultante tiene el formato correcto para la codificación JWT. Puede imprimir la cadena de la clave antes y después de los pasos de procesamiento y verificar si coincide con las expectativas.

    4. Verificar si la biblioteca JWT admite el algoritmo RS256 y el formato específico de clave que se está utilizando. Puede consultar la documentación de la biblioteca o abrir un problema en la página de Github del proyecto para obtener ayuda de los desarrolladores.

    Al abordar estos posibles problemas, es posible que pueda identificar la causa raíz del error y solucionarlo.

Comments are closed.