title | excerpt | updated |
---|---|---|
Gestión de los tokens |
Gestión de los tokens |
2024-12-10 |
Descubra cómo configurar las conexiones a las API keystone en su servicio utilizando los tokens.
[!primary]
La siguiente información es válida para la versión 3.0 de la API de Keystone.
-
Endpoint : Dirección HTTP que apunta directamente a una API de un servicio. por ejemplo, https://auth.cloud.ovh.net/v3/ para el punto de autenticación o https://image.compute.gra1.cloud.ovh.net/ para el punto de gestión de imágenes de la zona GRA1.
-
Token: Cadena de carácter única vinculada a la autenticación y a los derechos de acceso. El usuario solicita un token proporcionando sus credentials (información de login) a la API de autenticación. Se genera y proporciona con una validez limitada de 24 horas. Un token puede ser "scoped" o "unscoped", es decir, puede estar directamente relacionado a un tenant o no estar vinculado a ningún tenant.
La mayoría de las solicitudes presentadas a las API de OpenStack deben responder a un mecanismo de autorización. Este mecanismo funciona mediante la obtención de token (jeon en francés) y validación de este. A continuación explicamos cómo funciona una llamada desde la autenticación hasta la ejecución de la llamada.
- Solicitud de creación de token en el punto de autenticación con los credentials
- Consulta sobre el punto del servicio deseado (almacenamiento, compute, network...) proporcionando el token como parámetro
- La API del servicio recupera el token y solicita la verificación de validez ante el servicio de autenticación
- Si se verifica la validez, la llamada se toma en cuenta y se ejecuta
Como los tokens tienen un período de validez definido, expiran y deben renovarse siempre que sea necesario.
De la misma forma, si debe revocarse un token antes de su fecha de expiración, puede hacerlo a través de la API.
Para más información, consulte la documentación de OpenStack de la API{.external}.
Las siguientes operaciones pueden realizarse manualmente, generalmente se utilizan con fines pedagógicos o de debuging.
Es necesario cargar el entorno utilizando el archivo openRC. Para ello, le recomendamos que descargue y utilice el archivo openrc.sh que encontrará en la interfaz Horizon. que le permitirá acceder a todas las variables de entorno necesarias para realizar los siguientes comandos.
Para conectarse a Horizon y descargar el archivo, consulte esta guía.
En nuestro ejemplo, queremos obtener la información de metadata de un objeto almacenado gracias a la solución Public Cloud Storage. Los pasos son:
- Solicitud de creación de un token
- Obteniendo el ID de la variable y el punto públicoURL
- Consulta del objeto con la información obtenida
La herramienta en línea de comandos cURL permite construir peticiones de todas las piezas.
curl -X POST ${OS_AUTH_URL}v${OS_IDENTITY_API_VERSION}/auth/tokens -H "Content-Type: application/json" -d ' { "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "'$OS_USERNAME'", "domain": { "id": "default" }, "password": "'$OS_PASSWORD'" } } }, "scope": { "project": { "name": "'$OS_TENANT_NAME'", "domain": { "id": "default" } } } } }' | python -mjson.tool
La respuesta del servidor es:
{
"token": {
"is_domain": false,
"methods": [
"password"
],
"roles": [
{
"id": "9543e89aeb484aee8ec7d01e87223b16",
"name": "objectstore_operator"
}
],
"is_admin_project": false,
"project": {
"domain": {
"id": "default",
"name": "Default"
},
"id": "<ID OF THE PROJECT>",
"name": "NAME OF THE PROJECT"
},
"catalog": [
{
"endpoints": [
{
"url": "https://network.compute.sbg1.cloud.ovh.net/",
"interface": "internal",
"region": "SBG1",
"region_id": "SBG1",
"id": "075839111e7a41f1bb458926e5f04cec"
},
[...]
],
"type": "network",
"id": "0be6ed3dce244b8295ff643739a86809",
"name": "neutrón"
},
[...]
],
"expires_at": "2020-01-17T14:53:32.000000Z",
"user": {
"password_expires_at": null,
"domain": {
"id": "default",
"name": "Default"
},
"id": "<ID OF THE USER>",
"name": "NAME OF THE USER"
},
"audit_ids": [
"IuNOR-lKQ9GJGQd8taWBnQ"
],
"issued_at": "2020-01-16T14:53:32.000000Z"
}
}
Ambas informaciones están disponibles en la salida del comando anterior.
Para el dominio públicoURL, debe buscar en la sección "object-store" y la región adecuada, en este caso "SBG".
export endpoint="https://storage.sbg.cloud.ovh.net/v1/AUTH_9ea...ff0"
Es la dirección del punto del servicio de object storage que permite buscar información sobre el objeto.
export token=$(curl -is -X POST ${OS_AUTH_URL}v${OS_IDENTITY_API_VERSION}/auth/tokens -H "Content-Type: application/json" -d ' { "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "'$OS_USERNAME'", "domain": { "id": "default" }, "password": "'$OS_PASSWORD'" } } }, "scope": { "project": { "name": "'$OS_TENANT_NAME'", "domain": { "id": "default" } } } } }' | grep -i '^x-subject-token' | cut -d" " -f2)
Este token es ahora el elemento de autenticación que se utilizará para la siguiente petición.
curl -X GET $endpoint/photos/fullsize/ovh-summit-2014-backstage-DS.jpg -H "X-Auth-Token: $token" -I
- -X GET: Método HTTP GET
- $endpoint/photos/fullsize/ovh-summit-2014-backstage-DS.jpg: dirección del objeto
- -H "X-Auth-Token": $token": elemento de autenticación
- -I: opción curl para obtener solo las metadatas
La respuesta es:
HTTP/1.1 200 OK
Content-Length: 190046
Content-Type: image/jpeg
Accept-Ranges: bytes
Last-Modified: Thu, 24 Sep 2015 14:20:11 GMT
Etag: c93e12530b66f121d4bd5a6ae096ee77
X-Timestamp: 1443104410.15437
X-Object-Meta-Mtime: 1424095540.000000
X-Trans-Id: 95CAB26E:D200_052711B1:01BB_560D4CE7_1631931:2BB4
Date: Thu, 01 Oct 2015 15:10:31 GMT
Connection: close
Es altamente recomendable utilizar librerías que permitan la gestión transparente de los tokens. De esta forma, al proporcionar simplemente los credenciales de conexión a la librería, los tokens se generarán, utilizarán y renovarán automáticamente sin tener que gestionar los tokens a nivel aplicativo.
Existen numerosas librerías en los diferentes lenguajes. Consulte la lista oficial para más información{.external}.
curl -i -X DELETE \
-H "X-Auth-Token: $OS_TOKEN" \
-H "X-Subject-Token: $OS_TOKEN" \
"http://localhost:5000/v3/auth/tokens"
Si no hay errores, se obtiene una respuesta vacía.
Interactúe con nuestra comunidad de usuarios en https://community.ovh.com/en/.