2014-03-14 54 views
1

這甚至可能。保護REST Api而不要求用戶認證的最佳方法

給定的場景是我正在用ember.js或backbone.js構建一個商店。商店將能夠獲得所有產品和個別產品。然而,當用戶想要購買物品時,他們直接被帶到結帳處,並且沒有購物車或用戶註冊/登錄過程。我想知道是否有可能以某種方式驗證新的POST請求,該請求用於更新數量並將用戶送貨信息發回給用戶,而不是基於用戶是否已登錄並通過身份驗證,但可能基於請求的來源?例如基於IP或基於客戶端上存在的SSL證書的簽名。

我一直在使用Parse來播放後端,並在前端使用ember來實現這一點,ember數據提供了很好的資源來與REST apis接口,但大多數需要密鑰以某種方式傳遞給請求,因此放置在客戶端代碼內。不好。我怎樣才能在我的情況下實現這一目標,或者它根本無法實現?

回答

2

我不確定您將如何區分哪些用戶訂購了什麼,而不用以某種方式讓他們對自己進行身份驗證。

網上商店通常以兩種方式之一進行的:

  1. 讓用戶註冊和登錄,通過這種方式,用戶進行身份驗證和確認
  2. 讓用戶供給航運上的信息。當用戶購買

對於選項1頁,它有點明顯,你如何知道哪些用戶的訂單吧,因爲你已經驗證用戶在您的Ember.js應用程序,並在服務器端。

使用選項2,您仍然必須創建瀏覽器內cookie或以其他方式存儲您可以隨用戶數據一起發送到服務器的標識符。這樣,當用戶從購買中回來時,您仍然可以識別用戶購買的內容,並在您的應用中採取相應行動。

所以你進程將是這樣的:

  1. 創建和餅乾,當他們進入您的網站
  2. 當用戶進行購買,你會問用戶一些額外的信息分配給您的用戶(運輸信息,名稱等)。將它發送到服務器,然後服務器也會收到cookie信息。
  3. 當用戶從購買中回來時(我假設您在這裏使用第三方支付處理器,它將使用服務器上的URL回電),服務器端將知道購買的狀態(已批准,被拒絕等),並且基於用戶在購買時的cookie,您可以向用戶顯示其購買狀態。

這樣做的缺點是,如果用戶使用其他設備,瀏覽器或刪除cookie,你將不能夠顯示與他們以前的購買信息的用戶。

我希望能回答你的問題。

+0

你明白了,這就是我將要使用的過程,不包括cookie部分,我本質上是將數據發送到用戶發送信息的數據庫以及產品信息和唯一事務我從Stripe的退貨中獲得的ID,以便我們有辦法將購買與用戶送貨信息聯繫起來,以確保我們已收到付款。我唯一關心的就是確保有人不能訪問我的數據庫,因爲我的密鑰暴露在客戶端的javascript中。因此,任何人都可以抓住這些密鑰並找出解析URL – Jordan

+0

我從來沒有使用過Parse,但是如果他們沒有提供與您的JS應用程序進行通信的安全方式,那麼我會保持清晰。在公共API中暴露客戶的密鑰似乎是一個非常糟糕的主意! –

+0

是的,我猜他們假設我將它抽象爲某種類型的服務器腳本,並使用ajax或其他類似的東西發佈,我可以試試這個,但是我不是那個主題的超級知名人士,所以我們會看看發生。感謝您的洞察力。 – Jordan