2011-12-15 43 views
0

我想在PHP中實現OAuth之類的東西,我想要做的是給用戶令牌,以便他們可以使用他們的私人資源。每個用戶首​​先必須使用他們的電子郵件和密碼登錄並獲得唯一的令牌,除非在「n」分鐘內閒置,否則該令牌將永遠有效。所以如果有「n」分鐘的零請求,令牌應該被銷燬。令牌將被用於訪問用戶的私人資源。PHP會話和獨特的用戶令牌

有一件事我能想到這樣做是爲...

我會保持一個名爲的user_tokens的數據庫表,併爲他們與用戶名和密碼具有獨特的令牌登錄入口將在那裏創建。最後訪問的時間戳將被設置,並且用戶將給出唯一的令牌作爲響應。令牌現在可以用來訪問用戶的私人資源,並且需要傳遞所有需要令牌的請求。每個私人請求都會檢查上次時間戳和當前時間戳是否有「n」分鐘的差異,如果是,則銷燬令牌。否則,發送包含請求資源的響應並將上次時間戳設置爲當前時間戳。

這有道理嗎?或者可以有另一種有效的方式來做到這一點?

我想補充一點,令牌必須像twitter或者facebook從他們的API中退出。

+0

爲什麼你想重新發明輪子,哪裏沒有OAuth滿足您的需求? – 2011-12-15 14:47:43

+0

我從來沒有使用OAuth,但剛剛閱讀了它。這是唯一的原因。我很快就用已知的概念完成了這件事。 – Neutralizer 2011-12-15 14:50:00

回答

0

如果你正在尋找使用你應該Digg的傑夫·哈德森檢查出HTTP_OAuth梨包庫來實現的OAuth [1],並有關於數據庫設計使用Oauth [2]的一些好帖子。

雖然我覺得我很困惑你的問題。您是想爲您的Web應用程序創建一個API,還是僅僅提供一種保護用戶資源的方法?如果你想創建一個API,你一定要使用OAuth,並使用一個衆所周知的庫。這樣做將確保:

  1. 其他開發人員知道如何使用您的API,因爲它遵循的OAuth RFC [3]
  2. 你的web應用程序更可能是安全的
  3. 你意識到的最佳實踐和學習一些新的東西

如果你不希望做一個API,只是想保護用戶的資源,我認爲你會使用安全會議[4],並且,如果用戶是未登錄,他們無法訪問受保護的資源。

[1] HTTP_OAuth套餐:http://pear.php.net/pepr/pepr-proposal-show.php?id=607
[2]的Oauth數據庫設計:what is the recommended database structure for OAuth Provider
[3]的Oauth RFC:http://oauth.net/
[4] PHP會話:http://us2.php.net/manual/en/features.sessions.php

0

我使用session_regenerate_id生成令牌,我用session_id之前,但我必須弄清楚,使用session_id的sessID是永遠不變的值,然後renegerating這是適合我的解決方案。

現在我甚至可以控制,如果有相同的用戶,但與不同的sessID並給予註銷一個用戶的會話選項..

我不知道這是否是你在尋找什麼,但它解決了我關於TOKEN的問題。它永遠不會重複..

參考:http://br.php.net/manual/en/function.session-regenerate-id.php