【Go!帶你探索 FIDO2 資安技術全端應用】Day 23 - 開始進行前後端串接 (3)
昨天通過了第二關之後,今天要來接續第三關
串接之旅 Part 3
開始測試囉
串接第三關:failed to parse credential creation response, error: Parse error for Registration
從錯誤來看,是在解析 protocol.CredentialCreationResponse
的時候發生錯誤所導致的
那我們看一下 go-webauthn source code 來判斷有哪些可能性
看起來有四種可能性會導致 Parse error for Registration
的錯誤,我們來一一除錯 下面是我們要進行 parse 的 protocol.CredentialCreationResponse
轉成 JSON 格式後的樣子
我們的 credential.id 不為空,所以不會是 Missing ID
這個可能性 我們的 credential.id 有帶 padding (=
),跟 Raw 不吻合,所以有可能是 ID not base64.RawURLEncoded
這個導致的 我們的 credential.type 不為空,所以不會是 Missing type
這個可能性 我們的 credential.type 是 public-key
,所以不會是 Type not public-key
這個可能性
看起來最有可能導致錯誤的就是 ID not base64.RawURLEncoded
這個
那這個錯誤,我們可以從前端來進行修改,因為 credential.id 是由前端提供給後端的
我們看到前端 PasskeysViewController.swift
中的 passkeysFinishRegistration
Function 可以看到 credential.id 是轉換成 base64URL 編碼,而不是 base64RawURL 編碼
在這邊,我們改用 base64RawURL 的編碼方式,對 credential.id 進行編碼,像是下面這樣
而 base64EncodedToBase64RawURLEncoded
這個 Function 裡面寫了什麼呢?
其實就是將 base64 與 base64URL 對應的字串進行對換,以及將 padding (=
) 改為空字串
修改後,會像是下面這樣
再重新執行一次,就成功通過第三關了~
明天我們再繼續勇闖第四關!