簡體   English   中英

如何允許用戶使用我的REST API進行身份驗證?

[英]How do I allow users to authenticate with my REST API?

我正在嘗試為我的下一個項目創建REST API。 我想我了解大多數概念,但是對安全性有些不確定。 顯然,即使從生產代碼的第一個發行版起,安全性就不會出錯。

我知道REST是無狀態的,因此,與其讓用戶登錄並將會話存儲在服務器上並在每次發出請求時重新啟動,不如讓他們登錄,而是向服務器發送其唯一的API密鑰,然后服務器對每個請求進行身份驗證。

那么,用戶登錄系統的外觀如何? 是這樣的嗎?

  1. 用戶輸入用戶名和密碼
  2. 這些通過POST(或PUT)發送到API端點
  3. 如果憑據有效,則生成唯一的API密鑰並將其返回給客戶端
  4. 如果憑據無效,則將錯誤返回給客戶端

然后,客戶有責任存儲API密鑰並隨每個請求一起提交。 該密鑰存儲在數據庫中的服務器上,用於標識每個請求的用戶及其權限等。

這聽起來很合理,但也打破了應用程序的真正無狀態性,因為大多數請求都需要發送初始的“使我成為API密鑰”請求。

預先感謝您幫助我理解!

例如, GroupMe的API使用基於令牌的方法來驗證其API的用戶(這允許其API的用戶創建代表其調用API的腳本)。

為了成功進行API調用,我(作為API的用戶)必須登錄並創建一個應用程序,該應用程序為我提供了訪問令牌(見圖)。

這個訪問令牌(在groupme的情況下)是我必須包含在所有請求中才能使請求成功的原因。 格式可能會有所不同,具體取決於您使用的是誰的API,但是對於groupme,它看起來像這樣:

https://api.groupme.com/v3/PAGE_TO_CALL?token=YOUR_ACCESS_TOKEN

這將使GroupMe API可以識別我並執行我指定的任何操作。 此訪問令牌就像我的用戶名和密碼一樣,無論誰擁有它,都可以像我一樣進行API調用,包括我創建的所有腳本...

如果您有興趣創建自己的REST API,我會去了解一下這個文章,特別是最后一節上創建其他用戶可以使用您的API來驗證基於令牌的認證方法。

這是最相關的摘錄:

API認證

在普通的Web應用程序中,通常通過接受用戶名和密碼並在會話中保存用戶ID來處理身份驗證。 用戶的瀏覽器保存一個帶有會話ID的cookie。 當用戶訪問需要身份驗證的站點上的頁面時,瀏覽器發送cookie,應用程序通過ID(如果尚未過期)查找會話,並且由於用戶ID已保存在會話中,允許查看頁面。

使用API​​,使用會話來跟蹤用戶不一定是最好的方法。 有時,您的用戶可能希望直接訪問API,而有時用戶可能會授權其他應用程序代表他們訪問API。

解決方案是使用基於令牌的身份驗證。 用戶使用其用戶名和密碼登錄,應用程序以唯一令牌響應,該令牌可用於將來的請求。 該令牌可以傳遞到應用程序上,以便用戶在以后選擇拒絕該應用程序進一步訪問時可以撤消該令牌。

有一種標准的方法已經很流行。 稱為OAuth。 具體來說,是OAuth標准的版本2。 在線上有很多很棒的資源可用於實現OAuth,所以我認為這超出了本教程的范圍。 如果您使用的是Ruby,則有一些出色的庫可以為您處理大部分工作,例如OmniAuth。

暫無
暫無

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

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