我目前正在開發一個應用程式,并且剛剛獲得了身份驗證 API。而且,我有點困惑。主要是關于為什么 API 在使用訪問和重繪 令牌時使用密碼。
API(為簡單起見)有四個端點。/register、/verify、/refreshToken和/login。
身份驗證程序是無密碼的(對于用戶)。您通過 SMS 獲得 OTP 代碼。
該程序從用戶輸入他/她的電話號碼開始。然后應用程式應該在后臺生成一個密碼,并將其存盤起來供以后使用。之后使用電話號碼和密碼呼叫/register 。然后,服務器將 SMS OTP-Code 發送到用戶的手機。
用戶輸入OTP-Code。然后使用 OTP 代碼和存盤的密碼呼叫/verify 。此呼叫回傳訪問和重繪 令牌。
/refreshToken 當訪問令牌過期時/refreshToken被呼叫。它從存盤中獲取電話號碼、重繪 令牌和密碼。服務器回傳一個新的訪問和重繪 令牌。
/login 即使重繪 過期(它會很快),應用程式也會呼叫/login。它從存盤中獲取電話號碼和密碼。然后服務器回傳一個新的訪問和重繪 令牌。
我有多個 API 問題。
首先,它使用由應用程式生成且用戶不知道的密碼。這意味著,當用戶重置他/她的設備時,應用程式需要生成一個新密碼。這可以使用 OTP 代碼來完成。
/login端點使/refreshToken端點無用,即使重繪 令牌已過期,也能夠獲取新令牌。在我看來,這完全繞過了代幣背后的概念。
/refreshToken端點也需要密碼。
令牌背后的目的不是您不需要使用密碼重新認證嗎?
我對身份驗證不太熟悉。我只是不了解 API 嗎?
我也在與開發 API 的開發人員交談。我只是想在這里獲得第三個意見。
謝謝您的幫助。我希望我能夠解釋這些問題:)
uj5u.com熱心網友回復:
我想首先說,不同的應用程式對身份驗證有不同的安全要求,因此某些人可以接受的東西可能對其他人來說不可接受。話雖如此,讓我們嘗試了解這里發生了什么:
- 首先,您命名為密碼的東西并不是真正的密碼。它是客戶端和服務器之間共享的秘密。這是有道理的,因為它可以保護 SMS 通道免受中間??人攻擊(意思是:即使有人獲取了 OTP 代碼,他也無法登錄)。
- 擁有訪問和重繪 令牌是有意義的。我們通常交換憑證/MFA-secrets/生物特征來獲取訪問和重繪 令牌。
- 鑒于我們目前所看到的系統架構,存盤密碼秘密以及重用它來重新生成令牌的可能性是錯誤的。它完全不需要重繪 令牌。突然間,似乎有一個靜態的秘密可以重新生成這一切。這也使得這里不需要 SMS 通道。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/481294.html
