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.

Cómo obtener los detalles de la clave pública generada utilizando Laravel Passport.

Estoy tratando de crear un punto de conexión que devuelva detalles sobre la clave pública para que una puerta de enlace de API como Krakend pueda utilizar estos detalles para verificar el JWT. El punto de conexión necesita devolver una respuesta similar a la siguiente respuesta en formato json.

{
   "keys":[
      {
         "alg":"RS256",
         "kty":"RSA",
         "use":"sig",
         "n":"5dfikb_OwXGysznPX5Z4lcdXTGTmcDpBu4P_IYf9agP71NpVLF3nGnhedJGbiAk6hC6PMtrh7slURD6CWSgIjpvxemyXrPeSIlmpG068TKYHzFjYrJKou-Z1YbYGepRtKhepktN65vMPnqbMpqMrZKoY12dzPuD7EVHjvoQQ2EZ7K3TqMyPFm3MS7hYp8cL0CpSd1Tz40CEKY6l-WorCYbc7ULIMdAeiAlPesllerqzSc3MIkq9RKGrcbg-qWWEumxsdVG0nh-sI1q8UL_ctx1LB3yrF9F2gyLvsWIPDPfObP9zv40XcuALr83NwroofkeRLcP1jjoEvX-BN6Dyzdw",
         "e":"AQAB",
         "kid":"MDNGMjU2M0U3RERFQUEwOUUzQUMwQ0NBN0Y1RUY0OEIxNTRDM0IxMw",
         "x5t":"MDNGMjU2M0U3RERFQUEwOUUzQUMwQ0NBN0Y1RUY0OEIxNTRDM0IxMw",
         "x5c":[
            "MIIC8jCCAdqgAwIBAgIJH4krc5YgOHTtMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNVBAMTFWFsYmVydC10ZXN0LmF1dGgwLmNvbTAeFw0xNzAxMjIxNjM0MThaFw0zMDEwMDExNjM0MThaMCAxHjAcBgNVBAMTFWFsYmVydC10ZXN0LmF1dGgwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOXX4pG/zsFxsrM5z1+WeJXHV0xk5nA6QbuD/yGH/WoD+9TaVSxd5xp4XnSRm4gJOoQujzLa4e7JVEQ+glkoCI6b8Xpsl6z3kiJZqRtOvEymB8xY2KySqLvmdWG2BnqUbSoXqZLTeubzD56mzKajK2SqGNdncz7g+xFR476EENhGeyt06jMjxZtzEu4WKfHC9AqUndU8+NAhCmOpflqKwmG3O1CyDHQHogJT3rJZXq6s0nNzCJKvUShq3G4PqllhLpsbHVRtJ4frCNavFC/3LcdSwd8qxfRdoMi77FiDwz3zmz/c7+NF3LgC6/NzcK6KH5HkS3D9Y46BL1/gTeg8s3cCAwEAAaMvMC0wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUpb+3dP0YoLyGitKFk5mp426n+LUwDQYJKoZIhvcNAQEFBQADggEBADSg3K6Exwr4CSgO+VgDmuUuEy+svF/SbT1i3mN54hWtJmIpSTI2tuXZo+eT1A6M4Iyd1EK/lWH0lt+HuPgSgC7Ir3G8ctW0TPpmiTaiG8uMgbnSN7StWSdj1AZwDO6SHTsTQnFWbHVVtL8QX4yJ8f+ToAYOQlcdWtPqUBFqKK1NjvVUd5ZWIbTTJAigDCd/jYZhmTJ8CcUVvPAJ51yNGjaxoVwFZNR190B1qd+aygsUqrxTzSe3h3bnzYhQA4X6yHwP8du8JcrPiig7E29IRMQ0a/JzdmUVVJp3i+x1gZ2Z9KE/qyd3fiYMEwghszV2c2Jmd3pYOQ24lXTUsn1tIdo="
         ]
      }
   ]
}

He generado las claves pública y privada ejecutando el comando de clave de Laravel Passport:

php artisan passport:keys
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear un punto final que devuelva detalles sobre la clave pública para que una API gateway como Krakend pueda utilizar estos detalles para verificar el JWT, siga estos pasos:

    1. En su proyecto Laravel, cree una nueva ruta. Por ejemplo, puede crear una ruta GET que se mapee a la URL /public-key.
    2. Defina un método de controlador que maneje la solicitud de los detalles de la clave pública. Por ejemplo:

    public function getPublicKey()
    {
        $publicKeyContents = file_get_contents(storage_path('oauth-public.key'));
        $publicKeyData = openssl_pkey_get_public($publicKeyContents);
    
        $keyDetails = [
            'alg' => 'RS256',
            'kty' => 'RSA',
            'use' => 'sig',
            'n' => base64_encode(openssl_pkey_get_details($publicKeyData)['rsa']['n']),
            'e' => base64_encode(openssl_pkey_get_details($publicKeyData)['rsa']['e']),
            'kid' => 'MDNGMjU2M0U3RERFQUEwOUUzQUMwQ0NBN0Y1RUY0OEIxNTRDM0IxMw',
            'x5t' => 'MDNGMjU2M0U3RERFQUEwOUUzQUMwQ0NBN0Y1RUY0OEIxNTRDM0IxMw',
            'x5c' => [
                chunk_split(base64_encode($publicKeyContents), 64, "\n")
            ]
        ];
    
        return response()->json(['keys' => [$keyDetails]]);
    }
    
    1. En el código anterior, estamos leyendo el contenido del archivo de clave pública, analizándolo usando openssl_pkey_get_public() y luego extrayendo los detalles necesarios de la clave utilizando la función openssl_pkey_get_details().

    2. Luego devolvemos una respuesta JSON que coincide con el formato esperado por la API gateway, con los detalles de la clave en el array keys.

    3. Finalmente, asegúrese de proteger este punto final con autenticación y autorización apropiadas, ya que expone información sensible sobre la clave pública.

    Con este punto final en su lugar, una API gateway como Krakend puede utilizar estos detalles para verificar los JWT entrantes.

Comments are closed.