共用方式為


通用列印 (UP) 印表機存取令牌擷取

重要

印表機必須 已經向通用列印註冊 ,才能擷取其存取令牌。

若要取得代表印表機的存取令牌,印表機必須產生 JSON Web 令牌 (JWT),並使用其憑證私鑰簽署它。
此程序如下所示:

  1. 從裝置令牌端點要求 Nonce。
  2. 使用適當的信息產生裝置 JWT,並使用私鑰進行簽署。
  3. 使用本文中的 JWT,將要求傳送至裝置令牌端點。

1 要求 Nonce

若要要求 nonce,請將 POST 要求傳送至裝置令牌端點,其中包含伺服器挑戰的主體。

1.1 HTTP 要求

POST {device_token_url}

{device_token_url} 是從成功註冊回應收到的 URL。

1.2 要求內容類型

  • application/x-www-form-urlencoded

1.3 要求承載

  • grant_type=srv_challenge&windows_api_version=2.0

1.4 成功回應

使用下列值傳回 200 OK 和 JSON 格式響應承載中的 Nonce (區分大小寫):

值名稱 值類型 描述 必要
Nonce string 要與令牌要求搭配使用的 nonce 字串。 Yes

1.5 範例

1.5.1 要求

POST https://login.microsoftonline.com/425a8e89-feb9-40d2-9fe5-07fb45419e4b/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Length: 48

grant_type=srv_challenge&windows_api_version=2.0

1.5.2 回應

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Content-Length: 132
{
  "Nonce": "AQABAAAAAADX8GCi6Js6SK82TsD2Pb7rO4c24C6C31bER-HgavkQr-xx11qx0DFkaB6rfm-ikMj\_eUCSQ12bS4Id06ae1CUQjd8jN7xc4uGK-PA6Bj83HyAA"
}

2 產生裝置 JWT

產生的裝置 JWT 將包含令牌提供者向印表機發出裝置存取令牌所需的資訊。 下一節將詳細說明 JWT 標頭、本文和簽章中所需的資訊。

2.1 JWT 標頭

需要下列 JWT 標頭參數:

值名稱 值類型 描述 必要
alg string 用來產生公鑰的公鑰演演算法。 必須符合應為 「RS256」 的註冊要求資訊。 Yes
typ string 型別標頭參數。 應該是 「JWT」。。 Yes
x5c string 裝置憑證的完整主體(僅包含公鑰)。 這是成功註冊回應所傳回的憑證。 Yes

2.2 JWT 主體

需要下列 JWT 主體參數:

值名稱 值類型 描述 必要
request_nonce string 第1節中取得的 nonce 值。 Yes
grant_type string 固定常值字串 「device_token」 ,表示伺服器只需要裝置令牌。 Yes
resource string 存取令牌的目標物件。 這是成功完成註冊回應所傳回的 「mcp_svc_resource_id」值。 例如,https://print.print.microsoft.com Yes
client_id string 已註冊之 Azure 應用程式的應用程式(用戶端)標識符,具有通用列印的 API 許可權。 若要使用適當的 API 許可權建立 Azure 應用程式,請參閱 OEM 用戶端識別元註冊 Yes
redirect_uri string 本節中用於「client_id」之已註冊 Azure 應用程式 的已設定重新導向 URI。 若要為已註冊的 Azure 應用程式 設定重新導向 URI,請遵循 OEM 用戶端識別元註冊 Yes
iss string 從成功註冊回應收到的印表機雲端裝置標識碼。 Yes

2.3 JWT 簽章

由裝置私鑰簽署的 JWT,用來證明要求是從裝置發出的,而不是從不同的要求重新執行。

2.4 範例產生的 JWT

{
  "alg": "RS256",
  "typ": "JWT",
  "x5c": "MIID8jCCAtqgAwIBAgIQtJE/zIv3C5JOPoIeezhfLzANBgkqhkiG9w0BAQsFADB4MXYwEQYKCZImiZPyLGQBGRYDbmV0MBUGCgmSJomT8ixkARkWB3dpbmRvd3MwHQYDVQQDExZNUy1Pcmdhbml6YXRpb24tQWNjZXNzMCsGA1UECxMkODJkYmFjYTQtM2U4MS00NmNhLTljNzMtMDk1MGMxZWFjYTk3MB4XDTE4MDUxMDAzMjUzMVoXDTI4MDUxMDAzNTUzMVowLzEtMCsGA1UEAxMkZTlhNjc1YTItYTdjNS00ZmU3LThlODMtZmUxZWZhZjgyZWM2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjGw0ePNEZTNgDbTMMb+m8feCQY70yotozZnMFh5HehO2AvlaR1mZnAI+7rWd5pUdmPo83wGSchqj4cOsOQF699UEmZllDDpCMd9e/kkyFFQYVFBjLV67jUNyM5yDwCqSsNyTImuBQjpgOCoYt7nrsJ5nlaEiWB7HNMbPEJI8Szp9eMci/5j5ktRqU9SeWBUF7SIruaFKt5i7phTwx9ELJo554/yaQtJx5gZs1hpO/z9iLORu+13cj5aruvNZFnlyNyD7LNZ43J5biIIuqbFaUhCLBX70vuE/yhxkKjvyZwovP1PP5Bqc7ZLD6vIdh80bgJLd+xFKbL4OcD2DgxWI4QIDAQABo4HAMIG9MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwIgYLKoZIhvcUAQWCHAIEEwSBEKJ1punFp+dPjoP+Hvr4LsYwIgYLKoZIhvcUAQWCHAMEEwSBEHlLkyG0XmRHoNfDVt0FSVQwIgYLKoZIhvcUAQWCHAUEEwSBEImOWkK5/tJAn+UH+0VBnkswFAYLKoZIhvcUAQWCHAgEBQSBAk5BMBMGCyqGSIb3FAEFghwHBAQEgQEwMA0GCSqGSIb3DQEBCwUAA4IBAQB3q4Ey9AijQmHy0S3+fy1PV7pXq6aMhAgF7HvzmEwdmnjSCfvUd+fPkZA3tGQ6gkGlJ3mI4wq0xBZfk6YEQLLSuvukCphzZitz2NnpeCYMYpT2L7G1+EsIMu5+Wz84S4IO57IMBSLMDmsLLP2bHq+w1VOYgS9cO7Vha/nR3Z542LnaRKINUpFedHAtffv2tOQLRCPWk20KP5LEpKuEcM/r5EHFH6beKFuYePpJ7/dhKH69cZFWRtqgaV7BHxeDVr/n3kyHbDv1rwTXIYHaM3qEXDcSmyqEZqu0WEoz0FpVYt2pRw9pSb29+Y6n4vWTyWxVI8zMqDieYmaw7uXctqrr"
}.
{
  "request_nonce": "AQABAAAAAADX8GCi6Js6SK82TsD2Pb7rO4c24C6C31bER-HgavkQr-xx11qx0DFkaB6rfm-ikMj\_eUCSQ12bS4Id06ae1CUQjd8jN7xc4uGK-PA6Bj83HyAA",
  "grant_type": "device_token",
  "resource": "https://microsoft.com/mcp",
  "client_id": "1ef464e5-0b61-4c6f-b822-5dc015b9463e",
  "redirect_uri": "https://print.print.microsoft.com/",
  "iss": "e9a675a2-a7c5-4fe7-8e83-fe1efaf82ec6"
}.
[Signature]

3 要求裝置存取令牌

若要要求裝置令牌,請將POST要求傳送至裝置令牌端點,其中包含第2節中產生的JWT主體。

3.1 HTTP 要求

POST {device_token_url}

{device_token_url} 是從成功註冊回應收到的 URL。

3.2 要求內容類型

  • application/x-www-form-urlencoded

3.3 要求承載

使用下列名稱/值群組形成網址編碼格式:

值名稱 描述/值 必要
grant_type 設定為 urn:ietf:params:oauth:grant-type:jwt-bearer。 這表示令牌要求會在 JWT 中描述。 Yes
要求 第 2 節中產生的 Base-64 編碼 JWT。 Yes

重要

傳送裝置令牌要求時,請確定不包含「Cookie」。 傳送 Cookie 可能會導致非預期的行為。

3.4 成功回應

使用下列主要值傳回 200 OK 和 JSON 格式響應承載中的存取令牌(區分大小寫):

值名稱 值類型 描述 必要
access_token string 要求的存取令牌作為已簽署的 JSON Web 令牌 (JWT)。 印表機可以使用此令牌向受保護的資源進行驗證,例如Web API。 Yes
token_type string 指出權杖類型的值。 應該傳回的唯一類型是目前 Bearer。 Yes
device_info string 代表裝置的 JWT。 Yes
expires_in string 存取權杖的有效時間 (以秒為單位)。 Yes
expires_on string 存取令牌到期的時間。 日期會以 1970-01-01T0:0:0Z UTC 到到期時間之前的秒數表示。 這個值用來判斷快取令牌的存留期。 Yes
not_before string 必須接受 JWT 才能進行處理的時間。 Yes
resource string Web API 的應用程式識別碼 URI(受保護的資源)。 Yes

3.5 錯誤回應

這裡將說明詳細的錯誤回應: 使用授權碼來要求存取令牌

響應承載採用 JSON 格式,主要值如下(區分大小寫):

值名稱 值類型 描述 必要
error string 錯誤碼字串,可用來分類發生的錯誤類型,並可用來回應錯誤。 Yes
error_description string 特定錯誤訊息,可協助開發人員識別驗證錯誤的根本原因。 No
error_codes 整數陣列 可協助診斷的 STS 特定錯誤碼清單。 No
timestamp string 發生錯誤的時間。 No
trace_id string 可協助診斷之要求的唯一標識碼。 No
correlation_id string 要求的唯一標識符,可協助跨元件進行診斷。 No

3.5.1 嚴重錯誤

如果印表機已從 UP 入口網站或憑證取消註冊,則列印機將無法取得裝置存取令牌。 在這裡情況下,裝置令牌端點會傳回 "error": "invalid_grant""suberror": "device_authentication_failed"。 此時,印表機應將其狀態重設為 [取消註冊],因為需要重新註冊裝置。
例如:

{
  "error": "invalid_grant",
  "error_description": "AADSTS70002: Error validating credentials. AADSTS50155: Device is not authenticated.\\r\\nTrace ID: b099e7ad-ccf8-4eb7-b105-cced2f724d00\\r\\nCorrelation ID: 0d72010c-5a1f-4c19-99a7-48df28c5db66\\r\\nTimestamp: 2018-05-14 01:06:51Z",
  "error_codes": [70002, 50155],
  "trace_id": "b099e7ad-ccf8-4eb7-b105-cced2f724d00",
  "correlation_id": "0d72010c-5a1f-4c19-99a7-48df28c5db66",
  "suberror": "device_authentication_failed"
}

3.6 範例

3.6.1 要求

POST https://login.microsoftonline.com/425a8e89-feb9-40d2-9fe5-07fb45419e4b/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept-Charset: utf-8
Host: login.microsoftonline.com
Content-Length: 2737
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&request=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsIng1YyI6Ik1JSUQ4akNDQXRxZ0F3SUJBZ0lRdEpFL3pJdjNDNUpPUG9JZWV6aGZMekFOQmdrcWhraUc5dzBCQVFzRkFEQjRNWFl3RVFZS0NaSW1pWlB5TEdRQkdSWURibVYwTUJVR0NnbVNKb21UOGl4a0FSa1dCM2RwYm1SdmQzTXdIUVlEVlFRREV4Wk5VeTFQY21kaGJtbDZZWFJwYjI0dFFXTmpaWE56TUNzR0ExVUVDeE1rT0RKa1ltRmpZVFF0TTJVNE1TMDBObU5oTFRsak56TXRNRGsxTUdNeFpXRmpZVGszTUI0WERURTRNRFV4TURBek1qVXpNVm9YRFRJNE1EVXhNREF6TlRVek1Wb3dMekV0TUNzR0ExVUVBeE1rWlRsaE5qYzFZVEl0WVRkak5TMDBabVUzTFRobE9ETXRabVV4WldaaFpqZ3laV00yTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFqR3cwZVBORVpUTmdEYlRNTWIrbThmZUNRWTcweW90b3pabk1GaDVIZWhPMkF2bGFSMW1abkFJKzdyV2Q1cFVkbVBvODN3R1NjaHFqNGNPc09RRjY5OVVFbVpsbEREcENNZDllL2treUZGUVlWRkJqTFY2N2pVTnlNNXlEd0NxU3NOeVRJbXVCUWpwZ09Db1l0N25yc0o1bmxhRWlXQjdITk1iUEVKSThTenA5ZU1jaS81ajVrdFJxVTlTZVdCVUY3U0lydWFGS3Q1aTdwaFR3eDlFTEpvNTU0L3lhUXRKeDVnWnMxaHBPL3o5aUxPUnUrMTNjajVhcnV2TlpGbmx5TnlEN0xOWjQzSjViaUlJdXFiRmFVaENMQlg3MHZ1RS95aHhrS2p2eVp3b3ZQMVBQNUJxYzdaTEQ2dklkaDgwYmdKTGQreEZLYkw0T2NEMkRneFdJNFFJREFRQUJvNEhBTUlHOU1Bd0dBMVVkRXdFQi93UUNNQUF3RmdZRFZSMGxBUUgvQkF3d0NnWUlLd1lCQlFVSEF3SXdJZ1lMS29aSWh2Y1VBUVdDSEFJRUV3U0JFS0oxcHVuRnArZFBqb1ArSHZyNExzWXdJZ1lMS29aSWh2Y1VBUVdDSEFNRUV3U0JFSGxMa3lHMFhtUkhvTmZEVnQwRlNWUXdJZ1lMS29aSWh2Y1VBUVdDSEFVRUV3U0JFSW1PV2tLNS90SkFuK1VIKzBWQm5rc3dGQVlMS29aSWh2Y1VBUVdDSEFnRUJRU0JBazVCTUJNR0N5cUdTSWIzRkFFRmdod0hCQVFFZ1FFd01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQjNxNEV5OUFpalFtSHkwUzMrZnkxUFY3cFhxNmFNaEFnRjdIdnptRXdkbW5qU0NmdlVkK2ZQa1pBM3RHUTZna0dsSjNtSTR3cTB4QlpmazZZRVFMTFN1dnVrQ3BoelppdHoyTm5wZUNZTVlwVDJMN0cxK0VzSU11NStXejg0UzRJTzU3SU1CU0xNRG1zTExQMmJIcSt3MVZPWWdTOWNPN1ZoYS9uUjNaNTQyTG5hUktJTlVwRmVkSEF0ZmZ2MnRPUUxSQ1BXazIwS1A1TEVwS3VFY00vcjVFSEZINmJlS0Z1WWVQcEo3L2RoS0g2OWNaRldSdHFnYVY3Qkh4ZURWci9uM2t5SGJEdjFyd1RYSVlIYU0zcUVYRGNTbXlxRVpxdTBXRW96MEZwVll0MnBSdzlwU2IyOStZNm40dldUeVd4Vkk4ek1xRGllWW1hdzd1WGN0cXJyIn0.eyJyZXF1ZXN0X25vbmNlIjoiQVFBQkFBQUFBQURYOEdDaTZKczZTSzgyVHNEMlBiN3JPNGMyNEM2QzMxYkVSLUhnYXZrUXIteHgxMXF4MERGa2FCNnJmbS1pa01qX2VVQ1NRMTJiUzRJZDA2YWUxQ1VRamQ4ak43eGM0dUdLLVBBNkJqODNIeUFBIiwiZ3JhbnRfdHlwZSI6ImRldmljZV90b2tlbiIsInJlc291cmNlIjoiaHR0cHM6Ly9taWNyb3NvZnQuY29tL21jcC1wcGUiLCJjbGllbnRfaWQiOiIxZWY0NjRlNS0wYjYxLTRjNmYtYjgyMi01ZGMwMTViOTQ2M2UiLCJyZWRpcmVjdF91cmkiOiJodHRwczovL21jcC1wcGUuYXp1cmV3ZWJzaXRlcy5uZXQvIiwiaXNzIjoiZTlhNjc1YTItYTdjNS00ZmU3LThlODMtZmUxZWZhZjgyZWM2In0.bmvBY7cdD\_dGtbB9dXbjbj5qc5k9ssqOMe1KQnnUnChLz1nkgBMLU\_jBMwsAoHCvI\_udQAdDgyNmWFcnWxTY0sLARZ6FQmjbGclqrqhj\_kkJXdkNBdGcwIXafjQiFkpDlpTMbVjBWoQq49aW-e\_OcmfsVIg8DCdS-s87x0fJ3fuHzZJzVGEHC4D-43EPxWTXfVbsvOV7RNK15lq5GXm10W4DkRngK6EpMq69g75KCUqT\_MEEh5dGezl5Kic8RLZQ72n5aEpc5Y6XK85b1TdOtBnxogVjJFSsxpz1sOIpODszVu9CSUg4CHEjadpKQ9DiYCg6zB9D5fYbMf3NrGWC9Q

3.6.2 回應

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Content-Length: 2473
{
  "token_type":"Bearer",
  "expires_in":"3599",
  "ext_expires_in":"0",
  "expires_on":"1525928144","not_before":"1525924244","resource":"<https://microsoft.com/mcp>",
  "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9.eyJhdWQiOiJodHRwczovL21pY3Jvc29mdC5jb20vbWNwLXBwZSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzQyNWE4ZTg5LWZlYjktNDBkMi05ZmU1LTA3ZmI0NTQxOWU0Yi8iLCJpYXQiOjE1MjU5MjQyNDQsIm5iZiI6MTUyNTkyNDI0NCwiZXhwIjoxNTI1OTI4MTQ0LCJhbXIiOlsicnNhIl0sImRldmljZWlkIjoiZTlhNjc1YTItYTdjNS00ZmU3LThlODMtZmUxZWZhZjgyZWM2IiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNDI1YThlODktZmViOS00MGQyLTlmZTUtMDdmYjQ1NDE5ZTRiLyIsImlkdHlwIjoiZGV2aWNlIiwiaXBhZGRyIjoiMTY3LjIyMC4wLjc0Iiwib2lkIjoiZjM5NjNiMDItY2NjNS00NTg5LTkwYjQtMDJkNTA0OWE5ZGY3Iiwic3ViIjoiZTlhNjc1YTItYTdjNS00ZmU3LThlODMtZmUxZWZhZjgyZWM2IiwidGlkIjoiNDI1YThlODktZmViOS00MGQyLTlmZTUtMDdmYjQ1NDE5ZTRiIiwidXRpIjoiV005dVBHbXltRWV3RmdpMl9PcEdBQSIsInZlciI6IjEuMCJ9.gjCICKD2NT69bro4wK8r6SJhP6CBflnBqmlpF3pITl\_1Klv1DNYTue7a-Tup0vkFu0inN8njTG7rxlK\_j4m2mn1iUuh6CO-o98hN6VzjrarvZceBzGtsiOU2jtdacWP4JmePtTaXRmGDlK-PbTLy\_v4VmbL\_cQN2RIEiwf81suwnBacko0xbQhO3cPmGwKZcB5kFV4tnHp0uBnxyfcpRfV-ZR9Age41LWDW1ulOsTVuv1Q4XmmOmStkh2-TH1jOq1did6jyK1LKncdsSvEhKeo49-yBNshGntPs24qWL2WShz5cMQ3w5OBbAUOwl1DL-\_NtcUjCwbaLRwS6Dyliejw\",\"device\_info\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9.eyJhdWQiOiJiYWZjYjg2Zi1kYWFhLTQxYjEtYjQ5NC04NjA0MzZhNGMzMGQiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC80MjVhOGU4OS1mZWI5LTQwZDItOWZlNS0wN2ZiNDU0MTllNGIvIiwiaWF0IjoxNTI1OTI0MjQ0LCJuYmYiOjE1MjU5MjQyNDQsImV4cCI6MTUyNTkyODE0NCwiZGV2aWNlaWQiOiJlOWE2NzVhMi1hN2M1LTRmZTctOGU4My1mZTFlZmFmODJlYzYiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC80MjVhOGU4OS1mZWI5LTQwZDItOWZlNS0wN2ZiNDU0MTllNGIvIiwiaWR0eXAiOiJkZXZpY2UiLCJvaWQiOiJmMzk2M2IwMi1jY2M1LTQ1ODktOTBiNC0wMmQ1MDQ5YTlkZjciLCJzdWIiOiJlOWE2NzVhMi1hN2M1LTRmZTctOGU4My1mZTFlZmFmODJlYzYiLCJ0aWQiOiI0MjVhOGU4OS1mZWI5LTQwZDItOWZlNS0wN2ZiNDU0MTllNGIiLCJ1dGkiOiJXTTl1UEdteW1FZXdGZ2kyX09wR0FBIiwidmVyIjoiMS4wIn0.CPNbz9Cr20Ig\_i7Fc8GUx1NVpGXqQs9HsNH3F-QxUeJsep7m1rwiTE8WXsfXxiNGco0j1HFykiHdAsE\_-ymeVXaUtA5InC3uEeiHuIihQGbo9GC5gibzjsS\_psfqE74v\_9o7WuJTjFhpGdl1h57sOX49la312uR\_Khr6I6tIGiFon-gn4rGq5U0O4NV\_5LeitiHUXxuVxD2O9J5vERpwmnQ0UtyxX9skyFGEtcEruNch6noy\_5710xbcYv-8uO4VM8tM6CoqigWg\_7o18OciJ0VRBmsFLZtJUOxVSlPKeFneFDyKujpttbMIP-0-FdS75qckkqGYzoVbSuzsIcJa5g"
}