簡體   English   中英

API身份驗證流程

[英]API Authentication flow

我目前正在Go中編寫一個API,並且一直在思考如何正確安全地進行身份驗證/授權。

據我了解,這就是它的方式:

  • 新用戶通過api/user/register端點(或現有用戶的api/user/login )注冊帳戶
  • 服務器接收請求並檢查用戶名是否唯一等。之后,它會發出(如果一切正常) 訪問令牌刷新令牌 ,兩者都簽名以增加安全性。
  • 客戶端應用程序接收令牌並將其存儲在瀏覽器cookie(或本地/會話存儲)中,並確保在任何后續API請求中通過HTTPS安全地發送它們。
  • 當接收到受保護路由的請求時,服務器檢查訪問令牌的到期日期,如果過期,將檢查刷新令牌在數據庫中的有效性。 如果它無效,請求重新認證客戶端。 否則,重新發出新的訪問令牌。

我的問題是關於刷新令牌的步驟。

我也在編寫客戶端應用程序(在React中); 我不會向公眾發布API。 我只是將后端編寫為客戶端應用程序的API。

  • 我還應該使用刷新令牌嗎?
  • 我需要api/auth/token路由嗎? 我在實現示例中繼續閱讀它們,我覺得我可以只使用一些輔助函數來查詢數據庫並在我的后端代碼中重新發出令牌,而不必查詢另一個端點來執行此操作。

對不起,如果他們是愚蠢的問題,但我一直在仔細閱讀詳細說明auth規范,頁面之間的細微差別使我感到困惑,不確定什么是生產中真正的“最佳實踐”。

我認為你對登錄這個詞感到困惑。 而不是/api/user/login我稱之為/api/user/authentication 因此,如果請求的json附加到其主體,則返回有效的令牌。 但是,如果請求獲得了有效的Authentication Header,您只需在相同的時間段內發出一個有效的新令牌。 這對前端特別有用,因此您可以嘗試自動重新驗證。

newUser := types.User{}
if r.Body != nil {
     err := json.NewDecoder(r.Body).Decode(&newUser)
     ... 
}
authHeader := r.Header.Get("Authorization")
if authHeader != "" {
    _, err := USERAUTH.CHeckJWT(w,r)
    if err !=nil {
    ...,
    }
    newToken := GenerateTokenFromToken(token)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM