Sign in with Apple 新變化 | sign in with apple強制
這裡有兩個參數nonce和state,可以用於驗證執行請求後獲得的授權憑證是否符合預期。nonce:發起授權請時,開發者設置給request的不透明數據塊(opaqueblobofdata),它是一串字符串,用於唯一標識一次授權請求,每次創建新請求時都應設置不一樣的值。該值會作爲請求響應(ASAuthorizationresponse)中identityToken的一個屬性直接返回。因此服務端在驗證identityToken時,可以同時驗證此值,檢查該nonce之前是否已經使用過,有助於防止重放攻擊(replayattacks)。state:與nonce類似,由開發者手動設置給request,也是一串字符串;它...
這裡有兩個參數 nonce 和 state,可以用於驗證執行請求後獲得的授權憑證是否符合預期。
nonce:發起授權請時,開發者設置給 request 的不透明數據塊(opaque blob of data),它是一串字符串,用於唯一標識一次授權請求,每次創建新請求時都應設置不一樣的值。該值會作爲請求響應(ASAuthorization response)中 identityToken 的一個屬性直接返回。因此服務端在驗證 identityToken 時,可以同時驗證此值,檢查該 nonce 之前是否已經使用過,有助於防止重放攻擊(replay attacks)。
state:與 nonce 類似,由開發者手動設置給 request,也是一串字符串;它會直接在響應 response 中返回,使得開發者可以在本地將授權憑證結果與請求匹配,判斷當前響應是否由本設備中開發者自己的 app 發起的。
注1:Replay Attacks,重放攻擊,又稱重播攻擊、回放攻擊,是指攻擊者發送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。
注2:identityToken 是一個 JWT 格式的加密數據,JWT 相關知識介紹詳見:JSON Web Token[6]
簡單地說,nonce 和 state 都是開發者在發起授權時設置給 request 對象,在授權回調中,Apple 都會原封不動地返回,nonce 會拼接在 identityToken 中,主要在服務端驗證,用於防止重放攻擊;而 state 則是直接在授權響應結果中返回,用於客戶端本地驗證請求是否有當前 app 發起的。
設置完這兩個參數,我們就可以發起授權登錄請求了,當 request 的 scopes 中我們設置了 fullName 和 email,用戶會看的如下頁面:
此處,用戶可以選擇 「共享電子郵件」 或者 「隱藏郵件地址」。當用戶選擇 「隱藏郵件地址」 時,開發者會拿到一個中轉的專用郵件地址(eg: pfju...