驗證記號
記號驗證是現代應用程式開發的重要部分。 IBM Cloud® App ID 使用存取權杖和身分權杖,以確保使用者或應用程式在獲得存取權之前已通過身份驗證。透過驗證權杖,您可以保護應用程式或 API 免遭未經授權使用者的入侵。 如果您使用 App ID 所提供的其中一個 SDK,則會為您取得並驗證您的記號!
如需如何在 App ID 中使用記號的相關資訊,請參閱瞭解記號。
記號用來驗證人員的身分。 它們會確認使用者可能保留一段指定時間的任何存取權。 當使用者登入您的應用程式並獲得一個標記時,您的應用程式必須先驗證使用者,才能給予他們存取權限。
如果我使用的語言是 App ID SDK 沒有的語言,該怎麼辨?
您有三個選項:
- 使用 App ID API
- 實作自己的驗證邏輯
- 使用任何符合 OIDC 標準的開放程式碼 SDK
使用 App ID API
使用內部檢查,您可以使用 App ID 來驗證記號。
-
將 POST 要求傳送至 /introspect API 端點,以驗證您的記號。 要求必須提供記號以及包含用戶端 ID 和密碼的基本授權標頭。
要求範例:
POST /oauth/v4/<tenantID>/introspect HTTP/1.1 Host: us-south.appid.cloud.ibm.com Content-Type: application/x-www-form-urlencoded Authorization: Basic jdFlUaGlZUzAwTW0Tjk15TmpFMw== Cache-Control: no-cache token=XXXXX.YYYYY.ZZZZZ -
伺服器會檢查記號的期限和簽章,並傳回 JSON 物件,以分辨記號是作用中還是非作用中。
回應範例:
{ "active": true }
手動驗證記號
您可以藉由剖析記號、驗證記號簽章,以及驗證儲存在記號中的宣告,以在本端驗證記號。
-
剖析記號。 JSON Web Token(JWT) 是安全傳遞資訊的標準方式。 它包含三個主要部分:「標頭」、「有效負載」及「簽章」。 它們是以 base64URL 編碼並以點 (.) 區隔。您可以使用任何可用的 base64URL 解碼器來剖析記號。 另外,您也可以使用任何 列出的圖書館 來解析 token。
已編碼記號範例:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiJhMmszIn0 .eyJpc3MiOiJhcHBpZC1vYXV0aCIsImF1ZCI6ImFiYzEyMyIsImV4cCI6MTU2NDU2Nn0 .IycnAGUmMHzpTWbe-qaRsx0B4Zi-SVav710Fb_8CTCQvLrHX9d42WuCZ5bW d-ikgEsf6waQxeBfhfwYxwHN87LZupApagVMZtylVAnXhG1pHu_32wbZsPvg6QjzNO j6ys2Lfl3qfb5Qrp9u4IsZltKPEN8HdfeOcKXxpw6UqP-8已解碼記號範例:
{ "alg": "RS256", "typ": "JOSE", "kid": "a2k3", "iss": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6050a61", "aud": "abc123", "exp": 1564566 } -
呼叫 /publickeys endpoint 以擷取公開金鑰。 傳回的公開金鑰格式為 JSON Web Keys(JWK)。
要求範例:
GET /oauth/v4/<tenantID>/publickeys HTTP/1.1 Host: us-south.appid.cloud.ibm.com Cache-Control: no-cache -
將金鑰儲存至應用程式快取,以供未來使用。 儲存金鑰可加速此處理程序,並防止網路延遲(如果已進行另一個呼叫)。
-
匯入公開金鑰參數。
回應範例:
{ "keys": [ { "kty": "RSA", "use": "sig", "n": "AsdaE", "e": "SDAasw", "kid": "ad123dCAz" } ] }公鑰參數 參數 說明 kty定義使用的演算法。 use定義金鑰的用途。 kid定義金鑰的唯一 ID。 其他 可能還有您演算法特有、而且必須同時匯入的其他剩餘參數。 -
驗證記號的簽章。 記號標頭包含用來簽署記號的演算法,以及相符公開金鑰的「金鑰 ID」或
kid宣告。 因為公開金鑰不會經常變更,所以您可以在應用程式中快取公開金鑰,並偶爾重新予以整理。 如果您的快取金鑰遺漏kid宣告,則您可以在本端驗證記號。- 讓您的應用程式驗證送入記號標頭的內容符合公開金鑰的參數。
- 特別檢查已使用相同的演算法,而且公開金鑰快取包含具有相關「金鑰 ID」的金鑰。
- 確定雜湊值與公開金鑰的 PEM 形式簽章相同。 您可以藉由結合及雜湊處理記號有效負載的標頭,來取得雜湊值。 因為此處理程序可能十分複雜而無法手動實作,所以使用其中一個列出的檔案庫來驗證簽章可能很有用。
-
驗證儲存在記號中的宣告。 若要驗證未來的檢查,您可以使用此清單。
必須驗證的聲明 宣告 說明 iss發證者必須與 App ID OAuth 伺服器相同。 exp現行時間必須小於到期時間。 aud適用對象必須包含應用程式的用戶端 ID。 tenant承租戶必須包含應用程式的承租戶 ID。 scope授與使用者的許可權範圍。 這是存取記號特有的。