iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
  1. 密鑰生成:

    let senderKey = P256.KeyAgreement.PrivateKey()
    let recipientKey = P384.KeyAgreement.PrivateKey()
    

    生成發送方(P256曲線)和接收方(P384曲線)的私鑰。

  2. 設置過期時間:

    let expiredAt = Date().addingTimeInterval(60)
    

    設置JWT的過期時間為當前時間後60秒。

  3. 創建JWT聲明:

    let mockClaims = DefaultJWTClaimsImpl(
        iss: "testXiang",
        sub: "Xiang",
        exp: expiredAt
    )
    

創建包含發行者(iss)、主題(sub)和過期時間(exp)的JWT聲明。

使用發送者的私鑰 (senderKey) 和接收者的公鑰 (recipientKey.publicKey) 來建立共享密鑰。
利用共享密鑰 (sharedKey) 來加密 JWT 的負載 (payload)。
將保護標頭 (protectedHeader) 添加到加密的 JWT 中。
這個過程確保了 JWT 的內容只能被擁有正確私鑰的接收者解密和讀取,從而提高了資料的安全性和隱私性。

  1. 設置JWE頭部:

    let header = DefaultJWEHeaderImpl(keyManagementAlgorithm: .ecdhES,
                                      encodingAlgorithm: .a256GCM)
    

    設置JWE(JSON Web Encryption)頭部,使用ECDH-ES密鑰管理算法和A256GCM加密算法。

  2. 加密JWT:

    let jwt = try JWT.encrypt(
        payload: mockClaims,
        protectedHeader: header,
        senderKey: senderKey,
        recipientKey: recipientKey.publicKey,
        sharedKey: recipientKey
    )
    

    使用指定的聲明、頭部和密鑰加密JWT。

  3. 獲取JWT字符串:

    let jwtString = jwt.jwtString
    

    將加密後的JWT轉換為字符串形式。

  4. 驗證和解密JWT:

    let verifiedJWT = try JWT.verify(jwtString: jwtString, recipientKey: recipientKey)
    let verifiedPayload = verifiedJWT.payload
    

    使用接收方的密鑰驗證和解密JWT,獲取payload。

  5. 錯誤處理:
    整個過程被包裝在一個do-catch塊中,以處理可能發生的錯誤。


上一篇
Day25 - 實作 Signed JWT
下一篇
Day27 - JWT Claims
系列文
Xiang教你進階Swift從有到精30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言