Partager via


Inscription de l’imprimante d’impression universelle (UP)

1. Inscription

Flux 1.1

Flux d’inscription

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.

  1. Appel d’inscription initial pour inscrire l’imprimante

  2. 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_pendingl’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 .