Compartir a través de


Uso de la API de hotel desde un servicio

La llamada a La API de Hotel requiere un token de acceso, pero para obtener un token de acceso se requiere el consentimiento del usuario, a menos que tenga un token de actualización. Para obtener un token de actualización, puede escribir una aplicación de consola sencilla o puede usar este script de PowerShell.

$clientId = "your application ID goes here"
 
Start-Process "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=$clientId&scope=https://ads.microsoft.com/ads.manage%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient"
 
$code = Read-Host "Please enter the code"
 
$response = Invoke-WebRequest https://login.microsoftonline.com/common/oauth2/v2.0/token -ContentType application/x-www-form-urlencoded -Method POST -Body "client_id=$clientid&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient&code=$code&grant_type=authorization_code"
 
Write-Output "Refresh token: " ($response.Content | ConvertFrom-Json).refresh_token 

Para poder ejecutar el script de PowerShell, debe seguir estos pasos para obtener un identificador de cliente.

  1. Vaya a Microsoft Azure: Registro de aplicaciones y haga clic en Nuevo registro.
  2. Escriba un nombre de aplicación como Cliente de hoteles.
  3. En Tipos de cuenta admitidos, seleccione Cuentas en cualquier directorio organizativo (cualquier directorio de Azure AD: multiinquilino) y cuentas personales de Microsoft (por ejemplo, Skype, Xbox)
  4. En URI de redirección, seleccione Cliente público o nativo (escritorio de & móvil) y, a continuación, establezca el URI de redirección en https://login.microsoftonline.com/common/oauth2/nativeclient
  5. Haga clic en Registrar y anote el identificador de la aplicación (cliente).

Abra el Bloc de notas o el editor que prefiera y copie el script de PowerShell en el editor. Establezca $clientID en el identificador de aplicación que recibió al registrar la aplicación.

$clientId = "abc123-4d9e-44f1-837d-a7244af50027"

Guarde el archivo y asígnele el nombre GetTokens.ps1 (puede asignarle el nombre que desee, pero la extensión debe estar .ps1).

Ahora abra una ventana de consola. Para abrir una ventana de consola en Microsoft Windows, escriba el siguiente comando Ejecutar de Windows (<botón> de Windows+r):

cmd.exe

En el símbolo del sistema, vaya a la carpeta donde guardó GetTokens.ps1. A continuación, escriba el siguiente comando.

powershell.exe -File .\GetTokens.ps1

Si recibe un error de directiva de ejecución, tendrá que cambiar la directiva de ejecución. Para ver las opciones de la directiva de ejecución, consulte Acerca de las directivas de ejecución. Para cambiar la directiva de ejecución de una sesión, escriba el siguiente comando:

powershell.exe -ExecutionPolicy Bypass -File .\GetTokens.ps1

Cuando el script de PowerShell se ejecuta correctamente, se inicia una sesión del explorador en la que se escriben las credenciales de la cuenta Microsoft (MSA) (las credenciales que especifique deben tener acceso a los datos del hotel). Después de dar su consentimiento, la barra de direcciones del explorador contiene el código de concesión (vea ?code={copy this code}).

https://login.live.com/oauth20_desktop.srf?code=M7ab570e5-a1c0-32e5-a946-e4490c822954&lc=1033

Copie el código de concesión (M7ab570e5-a1c0-32e5-a946-e4490c822954) y introdúzcalo en la ventana de la consola en el símbolo del sistema. A continuación, el script de PowerShell devuelve un token de actualización. Use el token de actualización del servicio para obtener el token de acceso. Debe tratar el token de actualización como lo haría con una contraseña; si alguien se queda con ella, tiene acceso a los datos de su hotel.

El token de actualización es de larga duración, pero puede dejar de ser válido. Si recibe un error invalid_grant, el token de actualización ya no es válido y tendrá que volver a ejecutar el script de PowerShell para obtener el consentimiento y un nuevo token de actualización.

Ahora que tiene un token de actualización

Antes de usar el token de actualización, debe registrar el servicio para obtener un identificador de cliente.

  1. Vaya a Microsoft Azure: Registro de aplicaciones y haga clic en Nuevo registro.
  2. Escriba un nombre de aplicación para el servicio.
  3. En Tipos de cuenta admitidos, seleccione Cuentas en cualquier directorio organizativo (cualquier directorio de Azure AD: multiinquilino) y cuentas personales de Microsoft (por ejemplo, Skype, Xbox)
  4. Proporcione un URI de redireccionamiento según corresponda.
  5. Haga clic en Registrar y anote el identificador de aplicación (cliente) del servicio.

El servicio debe seguir estos pasos básicos para obtener el token de acceso en el que se establece el encabezado Authorization.

  • Obtención del token de actualización del almacenamiento protegido
  • Envío de una solicitud HTTP POST a https://login.microsoftonline.com/common/oauth2/v2.0/token
    • A continuación se muestra el cuerpo del POST (los parámetros se separan para mejorar la legibilidad):
      client_id=<yourclientid>
      &grant_type=refresh_token
      &redirect_uri=<urlencodedredirecturifromstep4>
      &refresh_token=<yourrefreshtoken>
  • Obtener el token de acceso, el token de actualización y la expiración de la respuesta
  • Establecer un temporizador que expire justo antes de que expire el token de acceso
  • Establecer el encabezado de autorización en el token de acceso
  • Almacenar el nuevo token de actualización en un almacenamiento protegido
  • Cuando expire el temporizador de expiración, repita el proceso.

A continuación se muestra un ejemplo de POST con un token de actualización para una aplicación de escritorio.

POST https://login.microsoftonline.com/common/oauth2/v2.0/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

client_id=2a6e519f-078e-45a5-9dfc-28d651f7fe96&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient&grant_type=refresh_token&refresh_token=MCRY2sZiCLfI9OJUpW*6I...

En función de la aplicación cliente, es posible que también deba incluirla &client_secret en post.

Solo debe obtener un nuevo token de acceso justo antes de que expire el token actual. No obtenga un nuevo token de acceso para cada llamada.