Inscription de l’imprimante d’impression universelle (UP)
1. Inscription
Flux 1.1
API 1.2
Les API suivantes sont disponibles avec le service d’inscription up global pour l’inscription d’imprimantes.
URL de base du service d’inscription UP globale : https://register.print.microsoft.com
L’URL complète est la combinaison de l’URL de base globale et du ou des points de terminaison ci-dessous.
1.2.1 /register
Le point de terminaison /register est utilisé pour inscrire une imprimante. Il existe 2 étapes pour l’inscription.
Appel d’inscription initial pour inscrire l’imprimante
Interrogation de l’état de l’inscription pour l’achèvement de la demande d’inscription
1.2.1.1 Lancement de l’inscription
La première étape consiste à lancer une demande d’inscription auprès du service d’inscription global. Pour ce faire, envoyez une requête POST au point de terminaison /register avec la charge utile d’inscription au format JSON.
1.2.1.1.1 Requête HTTP
POST /api/{version}/register
{version}
est la version de l’API/protocole d’inscription UP que l’imprimante utilise.
Actuellement, les versions prises en charge sont les suivantes :
- v1.0
1.2.1.1.2 En-têtes de requête
Pour v1.0 :
Nom | Description |
---|---|
Autorisation | Porteur {token} Obligatoire. L’imprimante doit connecter l’administrateur à l’ID Microsoft Entra, en suivant le flux code de l’appareil ou un autre flux d’autorisation. |
1.2.1.1.3 Demander le type de contenu
application/json
1.2.1.1.4 Charge utile de requête
La charge utile de la demande d’inscription sera au format JSON avec les valeurs suivantes (respectant la casse) :
Nom de la valeur | Type de valeur | Description | Obligatoire |
---|---|---|---|
name | chaîne | Nom convivial de l’imprimante. | Oui |
manufacturer | string | Fabricant de l’imprimante. | Oui |
modèle | string | Modèle de l’imprimante. | Oui |
device_id | string | UUID de l’appareil physique de l’imprimante. | Oui |
device_type | string | Type de l’appareil. Valeurs prises en charge (sans guillemets) : « imprimante » | Oui |
certificate_request | DeviceCertRequest (objet) | Demande de signature de certificat X.509 (CSR) pour le certificat créé et utilisé par l’imprimante pour s’identifier lui-même. Reportez-vous à l’annexe A.1 pour obtenir un exemple de codage sur la création d’une demande de signature de certificat avec la bibliothèque .NET BouncyCastle. | Oui |
L’objet DeviceCertRequest a les valeurs suivantes (respectant la casse) :
Nom de la valeur | Type de valeur | Description | Obligatoire |
---|---|---|---|
type | string | Propriété qui DOIT contenir « pkcs10 ». | Oui |
données | string | Propriété qui contient une demande de certificat PKCS#10 codée en base64 RFC4211. La demande de certificat DOIT utiliser un algorithme de clé publique RSA avec une clé 2048 bits, un algorithme de signature SHA256WithRSAEncryption et un algorithme de hachage SHA256. | Oui |
transport_key | string | Partie publique encodée en base64 d’une clé asymétrique générée par le client. | Oui |
1.2.1.1.5 Réponse réussie
En cas de réussite (202 Accepté), la charge utile de réponse d’inscription sera au format JSON avec les valeurs suivantes (respectant la casse) :
Nom de la valeur | Type de valeur | Description | Obligatoire |
---|---|---|---|
registration_id | string | ID unique qui représente cette demande d’inscription. Cette opération est utilisée lors de l’interrogation de l’état d’inscription. | Oui |
interval | entier | Temps d’interrogation (en secondes) pour vérifier l’achèvement de la demande d’inscription. | Oui |
1.2.1.1.6 Réponse d’erreur
En cas d’erreur, les codes d’état HTTP suivants sont retournés avec une charge utile de réponse d’erreur. La charge utile de réponse d’erreur contient un objet JSON d’erreur suivant le format de la section 2.
Codes d'état HTTP
Code d’état HTTP | Description |
---|---|
400 (Requête incorrecte) | La requête n’est pas valide ou incorrecte. Pour plus d’informations, consultez la charge utile de réponse d’erreur. Corrigez et renvoyez la requête. |
500 (Erreur interne du serveur) | Une erreur interne s’est produite dans le service. Pour plus d’informations, consultez la charge utile de réponse d’erreur. Réessayez la requête (si possible, retry_timeout sera définie). |
Codes d’erreur
Codes d’erreur | Description | Code d’état HTTP |
---|---|---|
invalid_request | La charge utile de la demande d’inscription a été incorrecte/non valide. Cela se produit généralement pendant les phases de développement. Pour plus d’informations, consultez error_description. | 400 |
device_code_error | Le service n’a pas pu générer de paire Appareil/Code utilisateur. | 500 |
storage_error | Le service a rencontré une erreur avec le stockage back-end. | 500 |
service_error | Une erreur s’est produite dans le service. Pour plus d’informations, consultez error_description. | 500 |
1.2.1.1.7 Exemples
1.2.1.1.7.5 Demande 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 Réponse 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 Obtention de l’état d’inscription
Une fois la demande d’inscription acceptée, l’imprimante interroge le /register
point de terminaison pour obtenir l’état de la demande d’inscription. L’imprimante doit interroger en fonction de la valeur d’intervalle reçue dans la réponse d’inscription et fournir la registration_id
valeur reçue.
1.2.1.2.1 Requête HTTP
GET /api/{version}/register?{Query Parameters}
{version}
est la version de l’API/protocole d’inscription UP que l’imprimante utilise.
Actuellement, les versions prises en charge sont les suivantes :
- v1.0
{Query Parameters}
sont spécifiés dans la section suivante.
1.2.1.2.2 En-têtes de requête
Pour v1.0 :
Nom | Description |
---|---|
Autorisation | Porteur {token} Obligatoire. L’imprimante doit se connecter à l’ID Microsoft Entra, ou suivre le flux code de l’appareil. Le même jeton acquis pour la première demande d’inscription peut être utilisé. |
1.2.1.2.3 Paramètres de requête de requête
Nom du paramètre | Description | Obligatoire |
---|---|---|
registration_id | ID d’inscription reçu de la réponse de la demande d’inscription. | Oui |
1.2.1.2.4 Réponses réussies
Les codes d’état HTTP suivants sont retournés pour les scénarios « réussite » suivants :
Code d’état HTTP | Phase d’inscription |
---|---|
200 (OK) | Inscription terminée |
202 (accepté) | Inscription en cours - Effectuez une autre requête une fois l’intervalle écoulé |
Charges utiles de réponse
Inscription en cours (202 accepté) :
La charge utile de réponse d’inscription sera au format JSON avec les valeurs suivantes (respectant la casse) :
Nom de la valeur | Type de valeur | Description | Obligatoire |
---|---|---|---|
interval | entier | Temps d’interrogation (en secondes) pour vérifier l’achèvement de la demande d’inscription. Notez que l’intervalle d’interrogation n’est pas nécessaire pour chaque fois. | Oui |
Inscription terminée (200 OK) :
La charge utile de réponse d’inscription sera au format JSON avec les valeurs suivantes (respectant la casse) :
Nom de la valeur | Type de valeur | Description | Obligatoire |
---|---|---|---|
cloud_device_id | string | UUID de l’imprimante dans le cloud que cette imprimante représente. | Oui |
certificate | string | Certificat X.509 codé en base64. | Oui |
print_svc_url | string | URL du service d’impression universelle (UP) qui gère les opérations d’imprimante. | Oui |
notification_url | string | URL qui doit être utilisée par l’imprimante pour écouter les notifications (nouveau travail d’impression, annuler le travail d’impression, etc.). | Oui |
mcp_svc_resource_id | string | ID de ressource du service UP. Obligatoire lors de la demande de jeton OAuth pour la communication avec up et UP Notification Services. | Oui |
device_token_url | string | URL de l’autorité de jeton sécurisée (STA) que l’imprimante doit utiliser pour obtenir des jetons pour les services UP et UP Notification Services. | Oui |
1.2.1.2.5 Réponse d’erreur
En cas d’erreur, les codes d’état HTTP suivants sont retournés avec une charge utile de réponse d’erreur. La charge utile de réponse d’erreur contient un objet JSON d’erreur suivant le format de la section 2.
Codes d'état HTTP
Code d’état HTTP | Description |
---|---|
400 (Requête incorrecte) | La requête n’est pas valide ou incorrecte. Pour plus d’informations, consultez la charge utile de réponse d’erreur. L’inscription doit être redémarré. |
500 (Erreur interne du serveur) | Une erreur interne s’est produite dans le service. Pour plus d’informations, consultez la charge utile de réponse d’erreur. L’inscription doit être redémarré. |
Codes d’erreur
Codes d’erreur | Description | Code d’état HTTP |
---|---|---|
invalid_registration_id | L’ID d’inscription fourni n’est pas valide. Cela peut se produire si l’ID d’inscription a été stocké de manière incorrecte ou si l’inscription de l’imprimante n’a pas été terminée dans le délai d’expiration de l’inscription. L’inscription doit être redémarré. | 400 |
device_already_exists | L’appareil inscrit est déjà inscrit. L’administrateur doit vérifier le portail UP pour voir si l’appareil inscrit est présent. Si c’est le cas, il peut s’agir d’une entrée obsolète que l’administrateur a oublié de supprimer/désinscrire. L’inscription doit être redémarré. | 400 |
user_token_error | Le service n’a pas pu obtenir le jeton utilisateur pour effectuer l’inscription. L’inscription doit être redémarré. | 500 |
storage_error | Le service a rencontré une erreur avec le stockage back-end. L’inscription doit être redémarré. | 500 |
service_error | Une erreur s’est produite dans le service. Pour plus d’informations, consultez error_description. L’inscription doit être redémarré. | 500 |
1.2.1.2.6 Exemples
1.2.1.2.6.3 Demande 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 Réponse en cours v1.0
HTTP/1.1 202 Accepted
Cache-Control: no-cache
Pragma: no-cache
{
"interval": 15
}
1.2.1.2.6.7 Réponse terminée 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 Authentification
Avant d’inscrire l’imprimante, vous devez authentifier l’administrateur auprès de Microsoft Entra ID, en suivant le flux code de l’appareil ou un autre flux d’autorisation. Le jeton d’accès administrateur de l’imprimante obtenu doit être envoyé dans l’en-tête d’autorisation de la demande pour inscrire une imprimante. La documentation du code de l’appareil et d’autres flux d’authentification pris en charge par l’ID Microsoft Entra se trouve dans les flux d’authentification pris en charge.
1.2.1.3.1 Paramètres de flux de code d’appareil
La documentation de la prise en charge de l’ID Microsoft Entra du flux de code d’appareil se trouve dans le flux de code de l’appareil OAuth 2.0. La client_id
liste ci-dessous est temporaire. Nous fournirons des informations supplémentaires dans un avenir proche.
Nom du paramètre | Description | Obligatoire |
---|---|---|
tenant | Utilisez « Organisations » pour le paramètre de locataire. | Oui |
client_id | Utiliser registered client ID pour le client_id. Informations supplémentaires sur l’inscription du client OEM. |
Oui |
scope | Utiliser https://print.print.microsoft.com/.default pour l’étendue |
Oui |
1.2.1.3.2 Exemples de demandes de flux de code d’appareil
1.2.1.3.2.1 Lancer le flux de code de l’appareil
Demande :
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
Réponse :
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.2 Récupération du jeton utilisateur
Demande :
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
Réponse : authorization_pending
l’utilisateur n’a pas encore connecté.
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
}
Réponse : success
, l’utilisateur s’est connecté, le jeton est retourné. Ce jeton peut être utilisé dans l’en-tête d’autorisation requis (décrit dans la section 1.2.1.1.2) lors de l’envoi d’une demande d’inscription d’une imprimante à l’aide de l’impression universelle.
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. Structure de réponse d’erreur
Pour les API ci-dessus, en cas d’erreur, la structure d’erreur suivante est retournée dans la charge utile au format JSON avec les valeurs suivantes (respectant la casse). Ces réponses d’erreur sont principalement à des fins de développement et c’est au développeur ce qu’il faut montrer à l’utilisateur, le cas échéant.
Nom de la valeur | Type de valeur | Description | Obligatoire |
---|---|---|---|
error | string | Chaîne de code d’erreur utilisée pour classer le type d’erreur qui s’est produit. | Oui |
error_description | string | Message d’erreur spécifique qui peut aider à identifier la cause racine de l’erreur. | Non |
error_code | entier | Code d’erreur supplémentaire qui peut aider à diagnostiquer le problème. | Non |
http_status_code | entier | Code d’état HTTP retourné avec cette réponse d’erreur. | Non |
retry_timeout | entier | Nombre de secondes pendant lesquelles l’imprimante doit attendre avant de réessayer la requête. | Non |
Chaque API ci-dessus répertorie sa ou ses chaînes de code d’erreur possibles.
2.1 Exemple de réponse
{
"error": "invalid_request",
"error_description": "Missing required field device_type"
}
Connectivité avec le service d’impression universelle après l’inscription de l’imprimante
Universal Print prend en charge les fonctionnalités requises définies dans PWG 5100.18 (IPP Infra). Les imprimantes prêtes à l’impression universelle sont censées utiliser ce protocole pour communiquer avec l’impression universelle une fois le processus d’inscription de l’imprimante terminé. Pour vous assurer que l’appelant est une imprimante avec accès, l’imprimante utilise le jeton d’accès de l’appareil, comme décrit dans La récupération du jeton d’accès à l’imprimante, comme valeur du porteur pour l’en-tête HTTP Authorization
.