Genera URL firmadas con tu propio programa

En esta página, se describe cómo crear URL firmadas de manera programática. Estas sirven como mecanismo para la autenticación de la string de consulta destinada a depósitos y objetos. Las URL firmadas son una manera de controlar el acceso a los depósitos y objetos. Una URL firmada se asocia con un objeto o depósito y otorga acceso de lectura o escritura por tiempo limitado a ese recurso específico. Cualquier persona que cuente con la URL tiene acceso otorgado por la URL, sin importar si tiene una Cuenta de Google.

Si deseas aprender a crear una URL firmada, consulta la Descripción general de las URL firmadas. Si deseas aprender a crear URL firmadas con rapidez con gsutil, consulta Crea URL firmadas con gsutil.

Crea una URL firmada con un programa

Puedes crear un programa que genere URL firmadas en una cantidad de lenguajes diferentes. Un programa como este necesita implementar los pasos para generar una URL firmada. Estos se describen a continuación.

  1. Crea una clave privada nueva o usa una clave privada existente para una cuenta de servicio. La clave puede estar en formato JSON o PKCS12.

    Para obtener más información sobre claves privadas y cuenta de servicio, consulta Cuentas de servicio.

  2. Construye la string que se firmará.

    1. Elige el HTTP_Verb (como GET, PUT o DELETE) que deben usar las solicitudes que usan la URL firmada.

    2. Agrega un valor de resumen de MD5 si deseas incluir el valor a las solicitudes que usarán la URL firmada.

    3. Especifica el Content-Type del objeto si las solicitudes que usarán la URL firmada tendrán un encabezado Content-Type.

    4. Especifica la marca de tiempo (en segundos transcurridos desde el punto de inicio del tiempo Unix) para cuando venza la URL firmada (es decir, cuando deja de otorgar acceso al objeto asociado).

    5. Especifica cualquier encabezado de extensión, separado por líneas nuevas, si las solicitudes que usarán la URL firmada contendrán esos encabezados. Sin embargo, no especifiques los encabezados x-goog-encryption-key o x-goog-encryption-key-sha256, aun si las solicitudes para acceder al objeto asociado los utilizarán.

    6. Especifica la ruta al recurso, que comienza a nivel de depósito.

    Puedes obtener una tabla que describe cada uno de los componentes en esta string en la Descripción general de la página de las URL firmadas.

    Una string de firma que contiene solo los componentes requeridos podría verse de la manera siguiente (ten en cuenta que las líneas nuevas se muestran como líneas nuevas reales y no como \n):

    GET
    
    1388534400
    /bucket/objectname
    

    Como alternativa, la string de firma siguiente contiene cada componente y se aplica a un objeto con una clave de encriptación proporcionada por el cliente (ten en cuenta que las líneas nuevas se muestran como líneas nuevas reales y no como \n):

    GET
    rmYdCNHKFXam78uCt7xQLw==
    text/plain
    1388534400
    x-goog-encryption-algorithm:AES256
    x-goog-meta-foo:bar,baz
    /bucket/objectname
    
  3. Firma la string.

    A fin de firmar la string, debes tener un ID de cliente de OAuth y claves privadas para una aplicación de tipo de cuenta de servicio, como se detalla en el primer paso de esta guía.

    Firma la string que creaste con las firmas RSA con SHA256 para autenticar las solicitudes.

    Por ejemplo, en Python, puedes usar el código siguiente para firmar tu string:

    from oauth2client.service_account import ServiceAccountCredentials
    creds = ServiceAccountCredentials.from_json_keyfile_name([KEY_FILENAME])
    client_id = creds.service_account_email
    signature = creds.sign_blob([SIGNATURE_STRING])[1]
    

    donde:

    • [KEY_FILENAME] es el nombre de archivo que contiene tu clave privada.
    • [SIGNATURE_STRING] es la string que creaste para firmar.

    En una aplicación de Google App Engine, puedes usar el servicio de identidad de app de App Engine para firmar tu string.

  4. Codifica la firma con Base64.

    Por ejemplo, en Python, puedes usar el código siguiente para codificar tu firma:

    encoded_signature = base64.b64encode(signature)
    
  5. Establece la URL.

    Después de crear la string de consulta y firmarla, establece la URL de la manera siguiente:

    1. Crea la URL base que hace referencia al recurso y asegúrate de usar el mismo valor que usaste en la string de consulta que acabas de firmar. Por ejemplo:

      https://storage.googleapis.com/google-testbucket/testdata.txt
    2. Codifica los caracteres en la firma que creaste según sea necesario para que se puedan usar en la URL.

      La firma codificada en Base64 puede contener caracteres no legales en las URL (en especial, + y /). Estos valores se pueden reemplazar por codificaciones seguras (%2B y %2F, respectivamente).

    3. Concatena la URL que desees distribuir de la manera siguiente:

      BASE_URL + "?GoogleAccessId=" + GOOGLE_ACCESS_STORAGE_ID + "&Expires=" + EXPIRATION + "&Signature=" + URL_ENCODED_SIGNATURE
      

      donde:

      • BASE_URL contiene la URL que creaste en la parte a.
      • GOOGLE_ACCESS_STORAGE_ID contiene el formulario de correo electrónico del ID de cliente.
      • EXPIRATION contiene el mismo valor que usaste en la string de consulta que firmaste.
      • URL_ENCODED_SIGNATURE contiene la firma que codificaste en la parte b.

    Este es un ejemplo de URL completa:

    https://storage.googleapis.com/google-testbucket/testdata.txt?GoogleAccessId=
    1234567890123@developer.gserviceaccount.com&Expires=1331155464&Signature=BCl
    z9e4UA2MRRDX62TPd8sNpUCxVsqUDG3YGPWvPcwN%2BmWBPqwgUYcOSszCPlgWREeF7oPGowkeKk
    7J4WApzkzxERdOQmAdrvshKSzUHg8Jqp1lw9tbiJfE2ExdOOIoJVmGLoDeAGnfzCd4fTsWcLbal9
    sFpqXsQI8IQi1493mw%3D
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.