2009-06-30 93 views
4

我正在尋找一種協議來保護移動設備和Web服務之間的連接。我想確保只有移動設備可以在Web服務上執行操作,反之亦然。數據不需要加密。保護移動設備和Web服務之間的連接的協議?

我知道Oauth,但它似乎更像是用來保護連接,當你有3個不同的實體(服務器,消費者和身份驗證)。在這裏,消費者和用戶將是同一個人。

是否有一個簡單的協議來做到這一點(不需要用戶登錄,然後授權訪問令牌,就像Oauth的情況一樣)?

我需要在不同的平臺上使用它,所以協議需要至少在iPhone和PHP上可用。

回答

1

我找到了一個解決方案:使用「雙腿Oauth」協議。

這樣,我堅持標準,我不必重新發明輪子,我有一個安全的解決方案。

由於消費者和用戶對我來說是一樣的,我只是簡單地授權消費者在看到消費者登錄爲用戶時所要求的「請求令牌」!

我在做什麼是:

  • 在SSL:我登錄的用戶,並要求消費者密鑰/祕密服務器
  • 服務器還給我消費鍵/祕密
  • 在SSL:我登錄的用戶,並要求「請求令牌」我的消費鍵/祕密
  • 服務器承認我是用戶,以便它自動授權請求令牌
  • 沒有SSL:我問一個「訪問令牌「我的「請求令牌」
  • 服務器給我的訪問令牌回來
  • 我用它來執行請求的安全
0

您可以通過HTTPS連接使用共享密鑰/單向加密哈希進行自我推送。

然後如果你想確保它只是一個特定的設備,在設備上做一個設備ID +時間戳+共享密鑰的哈希值,將它作爲參數傳遞給服務器,並驗證PHP方面。

+0

感謝約翰的回答,我認爲這是非常直截了當。但是,解決方案還應該包含一個隨機數,以避免有人抓住請求並重播它。 – Martin 2009-07-01 12:08:46

3

您需要說明'secure'是什麼意思。確切地說,確保什麼?你擔心什麼?

也就是說,https(http over SSL)是一個很好的起點,這將允許您驗證設備(或瀏覽器)的網站並且無處不在。

如果您想驗證設備,那有點棘手。你可以生成和存儲一個共享密鑰(一個隨機數),當第一次連接到該網站時,在GET/POST中提供該密碼......這裏有很多變體,但簡單的都是建立共享密鑰和其他任何事情都可能是矯枉過正。這將允許您識別下次連接時同一設備再次連接。把它想象成設備登錄的密碼(但是它不需要是一個詞,也可能不應該是)。

這樣做的困難在於,如果程序被刪除這個祕密會被丟失,這取決於你想要做什麼,這可能是爲下一次的程序在同一臺設備上運行的一個問題你」你需要建立一個新的祕密。在這種情況下,您無法知道連接此設備的設備與之前連接的設備相同。如果你需要,你需要使用某種重置機制,這很難做到,並且相當於驗證用戶而不是設備。

請注意,iphones有一個唯一的標識符,但這不是一個真正的祕密,並提供它並沒有真正提供給定設備連接的任何證明。提供它也沒有什麼壞處,但它更像是一個斷言「我是設備富」,而不是身份證明。把它想象成登錄名的用戶名部分 - 你仍然需要一些共享的祕密。