Registro de impresoras de impresión universal (UP)
1. Registro
1.1 Flujo
1.2 API
Las siguientes API están disponibles con el servicio global de registro de UP para registrar impresoras.
Dirección URL base del servicio de registro up global: https://register.print.microsoft.com
La dirección URL completa será la combinación de la dirección URL base global y los puntos de conexión siguientes.
1.2.1 /register
El punto de conexión /register se usa para registrar una impresora. Hay 2 fases para el registro.
Llamada de registro inicial para registrar la impresora
Estado de registro de sondeo para la finalización de la solicitud de registro
1.2.1.1 Iniciando el registro
La primera fase consiste en iniciar una solicitud de registro con el servicio de registro global. Para ello, se emite una solicitud POST al punto de conexión /register con la carga de registro en formato JSON.
1.2.1.1.1 Solicitud HTTP
POST /api/{version}/register
{version}
es la versión de la API o protocolo de registro up que usa la impresora.
Las versiones admitidas actualmente son:
- v1.0
1.2.1.1.2 Encabezados de solicitud
Para v1.0:
Nombre | Descripción |
---|---|
Authorization | Portador {token} requerido. La impresora debe iniciar sesión en el administrador en Microsoft Entra ID, siguiendo el flujo de código de dispositivo u otro flujo de autorización. |
1.2.1.1.3 Request Content-Type
application/json
1.2.1.1.4 Carga de solicitud
La carga de la solicitud de registro estará en formato JSON con los siguientes valores (distingue mayúsculas de minúsculas):
Nombre del valor | Tipo de valor | Descripción | Obligatorio |
---|---|---|---|
name | string | Nombre descriptivo de la impresora. | Sí |
fabricante | string | Fabricante de la impresora. | Sí |
modelo | string | Modelo de la impresora. | Sí |
device_id | string | UUID del dispositivo físico de la impresora. | Sí |
device_type | string | Tipo del dispositivo. Valores admitidos (sin comillas): "printer" | Sí |
certificate_request | DeviceCertRequest ( objeto) | Solicitud de firma de certificado (CSR) X.509 para el certificado creado y usado por la impresora para identificarse. Consulte el Apéndice A.1 para obtener un ejemplo de codificación sobre cómo crear una CSR con la biblioteca .NET de BouncyCastle. | Sí |
El objeto DeviceCertRequest tiene los siguientes valores (distingue mayúsculas de minúsculas):
Nombre del valor | Tipo de valor | Descripción | Obligatorio |
---|---|---|---|
type | cadena | Propiedad que DEBE contener "pkcs10". | Sí |
data | string | Propiedad que contiene una solicitud de certificado PKCS#10 codificada en base64 RFC4211. La solicitud de certificado DEBE usar un algoritmo de clave pública RSA con una clave de 2048 bits, un algoritmo de firma SHA256WithRSAEncryption y un algoritmo hash SHA256. | Sí |
transport_key | string | Parte pública codificada en base64 de una clave asimétrica generada por el cliente. | Sí |
1.2.1.1.5 Respuesta correcta
Si se ejecuta correctamente (202 Aceptado), la carga de respuesta de registro estará en formato JSON con los siguientes valores (distingue mayúsculas de minúsculas):
Nombre del valor | Tipo de valor | Descripción | Obligatorio |
---|---|---|---|
registration_id | string | Identificador único que representa esta solicitud de registro. Se usará al sondear el estado del registro. | Sí |
interval | integer | Tiempo de intervalo de sondeo (en segundos) para comprobar la finalización de la solicitud de registro. | Sí |
1.2.1.1.6 Respuesta de error
En caso de error, se devolverán los siguientes códigos de estado HTTP junto con una carga de respuesta de error. La carga de respuesta de error contendrá un objeto JSON de error siguiendo el formato de la sección 2.
Códigos de estado HTTP
Código de estado HTTP | Descripción |
---|---|
400 (Solicitud incorrecta) | La solicitud no es válida o tiene un formato incorrecto. Consulte carga de respuesta de error para obtener más información. Corrija y reenvíe la solicitud. |
500 (error interno del servidor) | Se ha producido un error interno en el servicio. Consulte carga de respuesta de error para obtener más información. Vuelva a intentar la solicitud (si es posible, retry_timeout se establecerá). |
Códigos de error
Códigos de error | Descripción | Código de estado HTTP |
---|---|---|
invalid_request | La carga de la solicitud de registro tiene un formato incorrecto o no es válido. Esto suele ocurrir durante las fases de desarrollo. Consulte error_description para obtener más detalles. | 400 |
device_code_error | El servicio no pudo generar un par de código de usuario o dispositivo. | 500 |
storage_error | El servicio experimentó un error con el almacenamiento back-end. | 500 |
service_error | Error en el servicio. Consulte error_description para obtener más detalles. | 500 |
Ejemplos de 1.2.1.1.7
1.2.1.1.7.5 Solicitud v1.0
POST https://register.print.microsoft.com/api/v1.0/register HTTP/1.1
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IkZ6U3pHTVZ1a0U2Nm9EQnpwR0JUY2NBMlVRYyIsImtpZCI6IkZ6U3pHTVZ1a0U2Nm9EQnpwR0JUY2NBMlVRYyJ9.eyJhdWQiOiJodHRwczovL3ByaW50LnByaW50LXBwZS5taWNyb3NvZnQuY29tIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy1wcGUubmV0LzIwZGY5NTlmLWE0OTItNGU3NC05N2E3LTE0YWJiM2ZlZjFkYi8iLCJpYXQiOjE1NjE2NzUxNjYsIm5iZiI6MTU2MTY3NTE2NiwiZXhwIjoxNTYxNjc5MDY2LCJhY3IiOiIxIiwiYWlvIjoiNDJOZ1lOQXNYbUtTSHZSM3Jvcjd2RVdMMWtmc0NMUi93R085cjYzMGl2T1RLWlVoV1ZzQSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiI0MTdhZTZlYi1hYWM4LTQyYzgtOTAwYy0wZTUwZGViYmE2ODgiLCJhcHBpZGFjciI6IjAiLCJmYW1pbHlfbmFtZSI6IlN0YWdlciIsImdpdmVuX25hbWUiOiJNYWRlbGluZSIsImdyb3VwcyI6WyI1YjljNGVkMS0yMWUyLTRkNzktYjE0Zi1mMzYyMTI5ODcyYjIiXSwiaXBhZGRyIjoiMTMxLjEwNy4xNTkuMjAiLCJuYW1lIjoiTWFkZWxpbmUgU3RhZ2VyIiwib2lkIjoiYzJmMjg2NDctMWQ4ZS00YTdhLWIzZjctZjU4YmQ3ODYxODk4IiwicHVpZCI6IjEwMDM0MDAwMDA2OEJFQzgiLCJzY3AiOiJzYW1wbGVzLnJlYWQgc2FtcGxlcy53cml0ZSIsInN1YiI6IlR6b2hRcmNzTHNjNUNHR09hWndxa1ZiajhaSkh4MnB1dzdpcWhWVXFWRGsiLCJ0ZW5hbnRfY3RyeSI6IlVTIiwidGlkIjoiMjBkZjk1OWYtYTQ5Mi00ZTc0LTk3YTctMTRhYmIzZmVmMWRiIiwidW5pcXVlX25hbWUiOiJtYXN0YWdlckBjbG91ZHByaW50cHBlLmNjc2N0cC5uZXQiLCJ1cG4iOiJtYXN0YWdlckBjbG91ZHByaW50cHBlLmNjc2N0cC5uZXQiLCJ1dGkiOiJlal84QlAtLW1rZWNNWjdncFJNR0FBIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.e1RpyZDQzqlV11uyRXWRmaqf6wk2mg763muoIiMG2Qq8DW221Rg91cLP5px6KSfhpd7nv-Ln_KUFsZ4IlJqfmsrfCL_vgKHjYQuRDv2BY8-vrIqUC_5XVA_sj2Ib7iT7SjDYyMv6QDZM2rf7kVggvRuaZihUxxGZWby84EXD8KKAYfAQGo3r6AceuSDJOvToMy-Kp-MEqRuzExZdq2p1_qRIBtHe8Its4xuR8ZHEVqWnY0Y_qeVA8uxl3mQxZSvH8BVYn4Bdy_VZcNtrNKt3YpHFzG4kgy5V6wGLecRI7IBzYd4uK_FwpaYXHpkrSbO0ATEX3tjrgPnHbicA053Ilw
Content-Length: 1600
{
"name": "Test Printer",
"manufacturer": "Test Manufacturer",
"model": "Test Model",
"device_type": "printer",
"device_id": "a188d9e8-8daa-44c9-862b-d6202bcf1b68",
"certificate_request":
{
"type": "pkcs10",
"data": "MIICpDCCAYwCAQAwYTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1JlZG1vbmQxFzAVBgNVBAoMDk1pY3Jvc29mdCBDb3JwMRIwEAYDVQQDDAlNaWNyb3NvZnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJ1xUdFKBlFdS9dHqSrD7YS0ZJ6MgcYy5wI3P0wOWrDi28OCBLbt6HBg02KDh1MlmVrfIR2O6WWeJ59M63JuwEn2e2WoGnIb/M6NyANyBBmgZ3bjp39UJHbXtYYXm/VJrPcOLM09dST7KR1zAcD2J+rnK8ZVUtYuTl58D7R6zsrYshw5CwxfLYPXeXwiSoKhtEC8Xn1lz3mi5B2SdsFHdjaQb6E0tCG5zdrVzzhCEVPaoo4e9SCTB9jDNulTU1ZkHzGBk+UzlKv4APsclyGCTEgA01T6/ueBrVeKY9d4DYfz/pu4sm0Vf1E+2hggtwbBOP60sFtkfnKiwtVoDF1KC9AgMBAAEwDQYJKoZIhvcNAQELBQADggEBACdggPBJ5MoJJ3QjVYDypuJGWDVWBT0G4pXNZHNz5Q4OVDze7aCw3Sl78Qdzy++XsrSXjtyZyEb+A5R36YKTpzRBCHSOWyZkZKpxj0Uo8/+RzjzJ1uvtwfhelfQ6EVktFsz6a2hixcaa47bN/bjj9stJbbRsxjJwR1K5YI/i+9DaUE7r7VDXiknQ7/ZyEYquAqY/O/LEnFOGhkSvkLlFPTbnJ7fzURyNnQhmp8p3DMj5dXYgKfWPxViqvJChx8pJf9zM4TjzaTZIj08tSOp2LtWGeMNkFgYJH4URe3t4OPx5crkKj8i5aIW1Ulb8ezJLW1IU7W8hF71ooZWFTOsAnjQ=",
"transport_key":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAydcVHRSgZRXUvXR6kqw+2EtGSejIHGMucCNz9MDlqw4tvDggS27ehwYNNig4dTJZla3yEdjullniefTOtybsBJ9ntlqBpyG/zOjcgDcgQZoGd246d/VCR217WGF5v1Saz3DizNPXUk+ykdcwHA9ifq5yvGVVLWLk5efA+0es7K2LIcOQsMXy2D13l8IkqCobRAvF59Zc95ouQdknbBR3Y2kG+hNLQhuc3a1c84QhFT2qKOHvUgkwfYwzbpU1NWZB8xgZPlM5Sr+AD7HJchgkxIANNU+v7nga1XimPXeA2H8/6buLJtFX9RPtoYILcGwTj+tLBbZH5yosLVaAxdSgvQIDAQAB"
}
}
1.2.1.1.7.6 Respuesta v1.0
HTTP/1.1 202 Accepted
Date: Thu, 27 Jun 2019 22:47:34 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
{
"registration_id": "fbbd6371-7e88-4881-8818-8d2ea2e8fe88",
"interval": 5
}
1.2.1.2 Obtención del estado de registro
Una vez aceptada correctamente la solicitud de registro, la impresora sondeará el /register
punto de conexión para el estado de la solicitud de registro. La impresora debe sondear en función del valor de intervalo recibido en la respuesta de registro y debe proporcionar el registration_id
objeto recibido.
1.2.1.2.1 Solicitud HTTP
GET /api/{version}/register?{Query Parameters}
{version}
es la versión de la API o protocolo de registro up que usa la impresora.
Las versiones admitidas actualmente son:
- v1.0
{Query Parameters}
se especifican en la sección siguiente.
1.2.1.2.2 Encabezados de solicitud
Para v1.0:
Nombre | Descripción |
---|---|
Authorization | Portador {token} requerido. La impresora debe iniciar sesión del administrador en Microsoft Entra ID o seguir el flujo de código de dispositivo. Se puede usar el mismo token adquirido para la primera solicitud de registro. |
1.2.1.2.3 Parámetros de consulta de solicitud
Nombre de parámetro | Descripción | Obligatorio |
---|---|---|
registration_id | Identificador de registro recibido de la respuesta de la solicitud de registro. | Sí |
1.2.1.2.4 Respuestas correctas
Se devolverán los siguientes códigos de estado HTTP para los siguientes escenarios de "éxito":
Código de estado HTTP | Fase de registro |
---|---|
200(OK) | Registro completado |
202 (Accepted) | Registro en curso: realice otra solicitud después de que haya transcurrido el tiempo del intervalo. |
Cargas de respuesta
Registro en curso (202 aceptado):
La carga de respuesta de registro estará en formato JSON con los siguientes valores (distingue mayúsculas de minúsculas):
Nombre del valor | Tipo de valor | Descripción | Obligatorio |
---|---|---|---|
interval | integer | Tiempo de intervalo de sondeo (en segundos) para comprobar la finalización de la solicitud de registro. Tenga en cuenta que el tiempo del intervalo de sondeo no será necesario cada vez. | Sí |
Registro completado (200 OK):
La carga de respuesta de registro estará en formato JSON con los siguientes valores (distingue mayúsculas de minúsculas):
Nombre del valor | Tipo de valor | Descripción | Obligatorio |
---|---|---|---|
cloud_device_id | string | UUID de la impresora en la nube que representa esta impresora. | Sí |
certificado | string | Certificado X.509 con codificación Base64. | Sí |
print_svc_url | string | Dirección URL del servicio Impresión universal (UP) que controla las operaciones de impresora. | Sí |
notification_url | string | La dirección URL que debe usar la impresora para escuchar notificaciones (nuevo trabajo de impresión, cancelar trabajo de impresión, etc.). | Sí |
mcp_svc_resource_id | string | Identificador de recurso del servicio UP. Se requiere al solicitar el token de OAuth para la comunicación con los servicios de notificaciones UP y UP. | Sí |
device_token_url | string | Dirección URL de la entidad de token seguro (STA) que la impresora debe usar para obtener tokens para los servicios de notificaciones UP y UP. | Sí |
1.2.1.2.5 Respuesta de error
En caso de error, se devolverán los siguientes códigos de estado HTTP junto con una carga de respuesta de error. La carga de respuesta de error contendrá un objeto JSON de error siguiendo el formato de la sección 2.
Códigos de estado HTTP
Código de estado HTTP | Descripción |
---|---|
400 (Solicitud incorrecta) | La solicitud no es válida o tiene un formato incorrecto. Consulte carga de respuesta de error para obtener más información. Se debe volver a iniciar el registro. |
500 (error interno del servidor) | Se ha producido un error interno en el servicio. Consulte carga de respuesta de error para obtener más información. Se debe volver a iniciar el registro. |
Códigos de error
Códigos de error | Descripción | Código de estado HTTP |
---|---|---|
invalid_registration_id | El identificador de registro proporcionado no es válido. Esto puede ocurrir si el identificador de registro se almacenó incorrectamente o si el registro de la impresora no se ha completado dentro del tiempo de espera del registro. Se debe volver a iniciar el registro. | 400 |
device_already_exists | El dispositivo que se está registrando ya está registrado. El administrador debe comprobar el portal up para ver si el dispositivo que se está registrando está presente. Si es así, podría ser una entrada obsoleta que el administrador olvidó eliminar o anular el registro. Se debe volver a iniciar el registro. | 400 |
user_token_error | El servicio no pudo obtener el token de usuario para realizar el registro. Se debe volver a iniciar el registro. | 500 |
storage_error | El servicio experimentó un error con el almacenamiento back-end. Se debe volver a iniciar el registro. | 500 |
service_error | Error en el servicio. Consulte error_description para obtener más detalles. Se debe volver a iniciar el registro. | 500 |
Ejemplos de 1.2.1.2.6
1.2.1.2.6.3 Solicitud v1.0
GET https://register.print.microsoft.com/api/v1.0/register?registration_id=bb86db79-2918-
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IkZ6U3pHTVZ1a0U2Nm9EQnpwR0JUY2NBMlVRYyIsImtpZCI6IkZ6U3pHTVZ1a0U2Nm9EQnpwR0JUY2NBMlVRYyJ9.eyJhdWQiOiJodHRwczovL3ByaW50LnByaW50LXBwZS5taWNyb3NvZnQuY29tIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy1wcGUubmV0LzIwZGY5NTlmLWE0OTItNGU3NC05N2E3LTE0YWJiM2ZlZjFkYi8iLCJpYXQiOjE1NjE2NzUxNjYsIm5iZiI6MTU2MTY3NTE2NiwiZXhwIjoxNTYxNjc5MDY2LCJhY3IiOiIxIiwiYWlvIjoiNDJOZ1lOQXNYbUtTSHZSM3Jvcjd2RVdMMWtmc0NMUi93R085cjYzMGl2T1RLWlVoV1ZzQSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiI0MTdhZTZlYi1hYWM4LTQyYzgtOTAwYy0wZTUwZGViYmE2ODgiLCJhcHBpZGFjciI6IjAiLCJmYW1pbHlfbmFtZSI6IlN0YWdlciIsImdpdmVuX25hbWUiOiJNYWRlbGluZSIsImdyb3VwcyI6WyI1YjljNGVkMS0yMWUyLTRkNzktYjE0Zi1mMzYyMTI5ODcyYjIiXSwiaXBhZGRyIjoiMTMxLjEwNy4xNTkuMjAiLCJuYW1lIjoiTWFkZWxpbmUgU3RhZ2VyIiwib2lkIjoiYzJmMjg2NDctMWQ4ZS00YTdhLWIzZjctZjU4YmQ3ODYxODk4IiwicHVpZCI6IjEwMDM0MDAwMDA2OEJFQzgiLCJzY3AiOiJzYW1wbGVzLnJlYWQgc2FtcGxlcy53cml0ZSIsInN1YiI6IlR6b2hRcmNzTHNjNUNHR09hWndxa1ZiajhaSkh4MnB1dzdpcWhWVXFWRGsiLCJ0ZW5hbnRfY3RyeSI6IlVTIiwidGlkIjoiMjBkZjk1OWYtYTQ5Mi00ZTc0LTk3YTctMTRhYmIzZmVmMWRiIiwidW5pcXVlX25hbWUiOiJtYXN0YWdlckBjbG91ZHByaW50cHBlLmNjc2N0cC5uZXQiLCJ1cG4iOiJtYXN0YWdlckBjbG91ZHByaW50cHBlLmNjc2N0cC5uZXQiLCJ1dGkiOiJlal84QlAtLW1rZWNNWjdncFJNR0FBIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.e1RpyZDQzqlV11uyRXWRmaqf6wk2mg763muoIiMG2Qq8DW221Rg91cLP5px6KSfhpd7nv-Ln_KUFsZ4IlJqfmsrfCL_vgKHjYQuRDv2BY8-vrIqUC_5XVA_sj2Ib7iT7SjDYyMv6QDZM2rf7kVggvRuaZihUxxGZWby84EXD8KKAYfAQGo3r6AceuSDJOvToMy-Kp-MEqRuzExZdq2p1_qRIBtHe8Its4xuR8ZHEVqWnY0Y_qeVA8uxl3mQxZSvH8BVYn4Bdy_VZcNtrNKt3YpHFzG4kgy5V6wGLecRI7IBzYd4uK_FwpaYXHpkrSbO0ATEX3tjrgPnHbicA053Ilw
Host: register.print.microsoft.com
1.2.1.2.6.4 En curso respuesta v1.0
HTTP/1.1 202 Accepted
Cache-Control: no-cache
Pragma: no-cache
{
"interval": 15
}
1.2.1.2.6.7 Respuesta completada v1.0
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 267
Content-Type: application/json; charset=utf-8
{
"cloud_device_id": "7c907b43-d8f0-4e42-a279-1e37eb4fd2bf",
"certificate": "MIID8jCCAtqgAwIBAgIQR2Y15zkurJhCGxcaQ0d7tjANBgkqhkiG9w0BAQsFADB4MXYwEQYKCZImiZPyLGQBGRYDbmV0MBUGCgmSJomT8ixkARkWB3dpbmRvd3MwHQYDVQQDExZNUy1Pcmdhbml6YXRpb24tQWNjZXNzMCsGA1UECxMkODJkYmFjYTQtM2U4MS00NmNhLTljNzMtMDk1MGMxZWFjYTk3MB4XDTE4MDExOTAwNTIxM1oXDTI4MDExOTAxMjIxM1owLzEtMCsGA1UEAxMkZjVlYjVmNWUtMDYyNC00YTNiLThmZjItNjQ5ZTAyM2ZiNzJkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApQc0Twp+vlT5Vc74zLoXbrufcIKnoW980OWFKHf7lRlRqjj9MWpea99j+3K8JQSoifXJvS5QzyjXrH9phsrfX84I258y6dM/aUadLYYKjO38wx9c1vQppZi1P3LcDaJiXPgNQ8omWCtDNoVwQlTUmB9Pq6h+V6S4P59Mq9cem6yEE7pu4DLqLSB68jexvLQnuGDfn6PsVUC3ML21zDmAr3QDikiZDe9Iy03IRrXvl6obj5QZtkGFbK9ueArFcWpymsEK
FfVhrKL7ca/rAEFHsHacJYHkJNMw3Qzs0yMYZRsH/fS+eBebvQWUEujQ+BX8xZQX48ukwtC8R37RsqrLjwIDAQABo4HAMIG9MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwIgYLKoZIhvcUAQWCHAIEEwSBEF5f6/UkBjtKj/JkngI/ty0wIgYLKoZIhvcUAQWCHAMEEwSBEHXH6W+38IhBoi1uqlWcNhUwIgYLKoZIhvcUAQWCHAUEEwSBEAWT1qlxl5pLvXhzFTIfL2swFAYLKoZIhvcUAQWCHAgEBQSBAk5BMBMGCyqGSIb3FAEFghwHBAQEgQEwMA0GCSqGSIb3DQEBCwUAA4IBAQCXpFMa9DCgIIJTD3RlEyPN8WB/HgMkhLBqwtZugkmIn8D80ckuhrfa2jJfWkNxEfFXanjq9B4tAvkNt7vBXiYw+PKj8+CE5FgfUTNtIw3Q/06tnJBj20mz28ZNbdRUgXzxXiY7oZss54dbHH+7TFO9k9Pm1CuUOzLFX4LeC48wo/S6uN7JDeID6pQjcR00eYJ+gcD800AXBYXrqSreYhdtl1swcD71qgshELAo2qXu0kzuKj05GIB5SXFOoU+KhuB0LMuEZF5rsQPN4KcasGaAb/8MIORAxkYStNLQZQLYbDve/dUownbfruW/o3tnjJP0GA0gY/Ohv5ssgrCFsiBq",
"print_svc_url": "https://print.print.microsoft.com/",
"notification_url": "https://notification.print.microsoft.com/",
"mcp_svc_resource_id":"https://print.print.microsoft.com",
"device_token_url": "https://login.microsoftonline.com/common/oauth2/token"
}
1.2.1.3 Autenticación
Antes de registrar la impresora, debe autenticar al administrador en microsoft Entra ID, siguiendo el flujo de código de dispositivo u otro flujo de autorización. El token de acceso de administrador de impresora obtenido debe enviarse en el encabezado de autorización de la solicitud para registrar una impresora. Puede encontrar documentación de código de dispositivo y otros flujos de autenticación compatibles con microsoft Entra ID en Flujos de autenticación admitidos.
1.2.1.3.1 Parámetros de flujo de código de dispositivo
Puede encontrar documentación sobre la compatibilidad de Microsoft Entra ID con el flujo de código de dispositivo en flujo de código de dispositivo de OAuth 2.0. La client_id
lista siguiente es temporal. Proporcionaremos información adicional en el futuro próximo.
Nombre de parámetro | Descripción | Obligatorio |
---|---|---|
tenant | Use "Organizations" para el parámetro tenant. | Sí |
client_id | Use registered client ID para el client_id. Información adicional en Registro del cliente OEM. |
Sí |
scope | Uso https://print.print.microsoft.com/.default para el ámbito |
Sí |
1.2.1.3.2 Solicitudes de flujo de código de dispositivo de ejemplo
1.2.1.3.2.1 Iniciar el flujo de código del dispositivo
Solicitud:
POST https://login.microsoftonline.com/organizations/oauth2/v2.0/devicecode HTTP/1.1
Accept-Charset: utf-8
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: login.microsoftonline.com
Content-Length: 103
Expect: 100-continue
Connection: Keep-Alive
client_id=<registered_client_id>&scope=https%3A%2F%2Fprint.print.microsoft.com%2F.default
Respuesta:
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Content-Length: 473
{
"user_code": "FMTB7B3WR",
"device_code": "FAQABAAEAAAAP0wLlqdLVToOpA4kwzSnx3SB1wjNptiBt5jFM8ePgJKGOjX-WOEksHYT3zgqz9VVg4MqY8J6Tej_rpniyj4WjOsVe-RCJuGexX-IwPKDK-df38P0zpLv5ktxSCflT_F-8Cbef6BRDpk0Qm-lPOhC4bcbtdIaM8yqf-cS962rGC9VdVNFVFStePppCDRcumjAgAA",
"verification_uri": "https://microsoft.com/devicelogin",
"expires_in": 900,
"interval": 5,
"message": "To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code FMTB7B3WR to authenticate."
}
1.2.1.3.2.2 Recuperando el token de usuario
Solicitud:
POST https://login.microsoftonline.com/tenant/oauth2/v2.0/token HTTP/1.1
Accept-Charset: utf-8
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: login.microsoftonline.com
Content-Length: 289
Expect: 100-continue
grant_type=device_code&client_id=<registered_client_id>&device_code=FAQABAAEAAAAP0wLlqdLVToOpA4kwzSnx3SB1wjNptiBt5jFM8ePgJKGOjX-WOEksHYT3zgqz9VVg4MqY8J6Tej_rpniyj4WjOsVe-RCJuGexX-IwPKDK-df38P0zpLv5ktxSCflT_F-8Cbef6BRDpk0Qm-lPOhC4bcbtdIaM8yqf-cS962rGC9VdVNFVFStePppCDRcumjAgAA
Respuesta: authorization_pending
, el usuario aún no ha iniciado sesión.
HTTP/1.1 400 Bad Request
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Content-Length: 469
{
"error": "authorization_pending",
"error_description": "AADSTS70016: Pending end-user authorization.\r\nTrace ID: 60997c8b-15ed-4d12-99b6-6da879fd1400\r\nCorrelation ID: 7300aba9-1698-4a4e-b6dd-66459a828108\r\nTimestamp: 2019-09-26 23:13:43Z",
"error_codes": [70016],
"timestamp": "2019-09-26 23:13:43Z",
"trace_id": "60997c8b-15ed-4d12-99b6-6da879fd1400",
"correlation_id": "7300aba9-1698-4a4e-b6dd-66459a828108",
"error_uri": https://login.microsoftonline.com/error?code=70016
}
Respuesta: success
, el usuario ha iniciado sesión, se devuelve el token. Este token se puede usar en el encabezado de autorización necesario (descrito en la sección 1.2.1.1.2) al enviar una solicitud para registrar una impresora con impresión universal.
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Content-Length: 1763
{
"token_type": "Bearer",
"scope": "https://print.print.microsoft.com/Print.Device https://print.print.microsoft.com/.default",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImFQY3R3X29kdlJPb0VOZzNWb09sSWgydGlFcyIsImtpZCI6ImFQY3R3X29kdlJPb0VOZzNWb09sSWgydGlFcyJ9.eyJhdWQiOiJodHRwczovL3ByaW50LnByaW50Lm1pY3Jvc29mdC5jb20iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9mMGQ4ODMyMy04OGY2LTQ4MTMtOGI0ZC05NGVjNjdlNjA3YmQvIiwiaWF0IjoxNTY5NTM5Mzc3LCJuYmYiOjE1Njk1MzkzNzcsImV4cCI6MTU2OTU0MzI3NywiYWNyIjoiMSIsImFpbyI6IkFTUUEyLzhNQUFBQVA1U1NzTklCYXRVQ2UxSGZXaEdvNHhqbUM4b2RCckNpeDNaN0dyZWJUMEE9IiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjQxN2FlNmViLWFhYzgtNDJjOC05MDBjLTBlNTBkZWJiYTY4OCIsImFwcGlkYWNyIjoiMCIsImdyb3VwcyI6WyIzMjVhNDljOS1mNjQ0LTQxNjEtODdmZS1kZTQ5ZGEyNDhjZTkiXSwiaXBhZGRyIjoiMTY3LjIyMC4yLjE4IiwibmFtZSI6Ik1hZGVsaW5lIFN0YWdlciIsIm9pZCI6ImIzZTE1ODM0LTAxZmUtNDIwNi05MjkwLTk5OTNiMzM1MWM2MSIsInB1aWQiOiIxMDAzN0ZGRUFDRjVBNUE1Iiwic2NwIjoiUHJpbnQuRGV2aWNlIiwic3ViIjoiN2hhQzVjdEZlYjZPVHBsMHROUDJmRDJVY3pWTFRjbTZlNkQ1eEZkOEpvYyIsInRlbmFudF9jdHJ5IjoiVVMiLCJ0aWQiOiJmMGQ4ODMyMy04OGY2LTQ4MTMtOGI0ZC05NGVjNjdlNjA3YmQiLCJ1bmlxdWVfbmFtZSI6Im1hc3RhZ2VyQGNsb3VkcHJpbnRwcm9kdWN0aW9uLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im1hc3RhZ2VyQGNsb3VkcHJpbnRwcm9kdWN0aW9uLm9ubWljcm9zb2Z0LmNvbSIsInV0aSI6Inp2N2EtdGRrR0VHQkFSMl9zWU1UQUEiLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.Nfz82GPdQUx6py2xwhVhI4hvpbLTdaaDSVFnGx4Eb3CeJHcQvCmmKoB9Lze7YITcEcLdxUkGEQGEXSh6M3yDrNP_hsoIROdWhe6RDjbYVPmJUL319lL4eNtQTJq8bKcJVbeM5SamlY1mBIhxH_sjL4TX0NN2RnDIuF_L1NSRW0IaHoZxzf257y0n7BqPROl3VpQ97wA8P-hhVBbfwwB9i-sLbsoCVszuE9JnHpgJPm6h9FDL9Px57ddTMZDvJchxOL5gUTA76gdRqUUzLROCMlz0R7vTJotl2RQnrzZBoNNoM9iJHL2KqQKuuezHEro1453lSRASiBkZHHEOFglzSg"
}
2. Estructura de respuesta de error
En el caso de las API anteriores, en caso de error, se devolverá la siguiente estructura de errores en la carga en formato JSON con los siguientes valores (distingue mayúsculas de minúsculas). Estas respuestas de error son principalmente para fines de desarrollo y depende del desarrollador qué mostrar al usuario, si hay algo.
Nombre del valor | Tipo de valor | Descripción | Obligatorio |
---|---|---|---|
error | string | Cadena de código de error que se usa para clasificar el tipo de error que se produjo. | Sí |
error_description | string | Mensaje de error específico que puede ayudar a identificar la causa principal del error. | No |
error_code | integer | Código de error adicional que puede ayudar a diagnosticar el problema. | No |
http_status_code | integer | Código de estado HTTP que se devolvió con esta respuesta de error. | No |
retry_timeout | integer | Número de segundos que la impresora debe esperar antes de volver a intentar la solicitud. | No |
Cada API anterior enumerará sus posibles cadenas de código de error.
2.1 Respuesta de ejemplo
{
"error": "invalid_request",
"error_description": "Missing required field device_type"
}
Conectividad con el servicio de impresión universal después del registro de la impresora
Universal Print admite la funcionalidad necesaria definida en PWG 5100.18 (IPP Infra). Se espera que las impresoras preparadas para impresión universal usen este protocolo para comunicarse con la impresión universal una vez que haya completado el proceso de registro de la impresora. Para asegurarse de que el autor de la llamada es una impresora con acceso, la impresora usará el token de acceso del dispositivo, tal y como se describe en Recuperación de tokens de acceso de impresora, como valor de portador para el encabezado HTTP Authorization
.