2013-05-15 57 views
1

我需要爲我們將託管的一些Web服務實現身份驗證。我想使用開放標準,所以我對OAuth感興趣。使用DotNetOpenAuth實現API密鑰

我將爲這些服務使用WebAPI。

所以這裏是我遇到麻煩的地方:我讀過的大多數(或者全部)Api Key/OAuth場景涉及(在某個點或另一個位置)坐在屏幕前的用戶。

我需要組合一個業務夥伴將調用的API。這些電話將來自一個自動化過程 - 鏈中任何地方都不會有一個人可以通過登錄憑證重定向到網站。

但是,我不想只有任何人到處打電話給我的服務。

因此,我瞭解了OAuth以及它如何使用共享密鑰來簽署每個請求,我認爲這就是我所追求的。 (我會設置一個會話密鑰,或者可以考慮將其中一個參數設置爲「ticks」值,並且只能在短時間內接受請求等)。

我曾經希望能夠使用DotNetOpenAuth完成這個(或類似的東西),但我遇到的每一個例子都以「用戶被重定向到一個登錄頁面」開頭,我只需要「雙腿」認證。這個?

有沒有一種更好的方式去?

回答

5

如果您正在尋找在隨後的OAuth 2你去流劃線是Client Credentials Grant

這種「雙腿」/「服務帳戶」類型的流程是一個沒有基於網頁的流程。

DotNetOpenAuth支持客戶端憑證授予。你可以看到它的一個實例here;然而,即使作者聲明它是「資源所有者密碼憑證」授予它實際上是客戶端憑證授予,也要知道。

上面的博客文章與最新的DotNetOpenAuth代碼庫有點不合拍,但是這些代碼很快就被識別和更改了。

我相信,DotNetOpenAuth僅支持使用Http Basic身份驗證發出持票人令牌。還有其他更具異國情調的擴展OAuth 2具有類似的流程,例如JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants(但據說這還不是DotNetOpenAuth的一部分)。

+0

感謝馬克,這看起來很有希望。現在檢查出來... – JMarsch

+0

嗨馬克,我已經通讀了代碼。我有一點困惑:有一些代碼載入公共和私人證書。我曾認爲OAuth提供的認證方式不依賴於SSL證書。這是一個必需的步驟嗎?我在這裏錯過了什麼? – JMarsch

+0

Hi @JMarsch OAuth 2規範與OAuth 1的不同之處在於,它依賴於HTTPS通信來處理所有請求,這使得在承載令牌的「理論」中可以不受保護地發送......但是,實際上應該保護承載令牌。生成的「令牌」即承載令牌需要被信任。在示例博客中,因此在這些示例中使用SSL證書的私鑰進行簽名。雖然在OAuth 2規範中未強制承載令牌的簽名或加密,但建議您使用它。 DotNetOpenAuth因此將該簽名應用於令牌。 –