2013-04-22 64 views
17

我做了一些關於restful api身份驗證的調查。大多數人都指出Oauth2是安靜的api認證。我研究了一些資源,特別是這個鏈接https://developers.google.com/accounts/docs/OAuth2寧靜api身份驗證與oauth2混淆

在我看來,Oauth2是第三方應用程序在谷歌/臉書(或其他數據提供者)訪問用戶的數據。

我們的問題是,我們擁有數據,我們不需要訪問我們客戶的任何第三方數據,我們的客戶不需要任何第三方數據。我們希望通過某種身份驗證來保護我們的api。

對於我們的情況我們寧靜的api身份驗證的便利技術是什麼?我們會公佈我們的API類似這樣的

https://ourdomain.com/api/<endpoint> 

我們的客戶可以首先訪問一個網站,註冊https://ourdomain.com,他們應該能夠從我們的網站獲得的clientId和clientKey訪問的API。我們的客戶應該可以通過某種身份驗證進行消費

+0

你是如何暴露你的API?它只適用於你自己的消費(例如你自己的網站/移動應用程序)? – rhinds 2013-04-22 19:22:43

+0

@rhinds我已更新我的帖子。謝謝 – wwli 2013-04-22 19:25:20

+0

當你說我們的客戶會消費api - 誰是你的客戶? – rhinds 2013-04-22 19:28:04

回答

5

如果我理解正確,您需要的類似於OAuth的方式,您可以完全相同的方式減去授予第三方應用訪問用戶資源的權限。

在OAuth中,有一箇中央系統通過檢查應用程序憑證+用戶憑證並分配授權令牌來管理認證和授權。有多個端點將接受這些授權令牌。

令牌基本上是加密的字符串,其中包含有關用戶憑據的信息以及您的應用可能需要的其他信息。

你需要什麼(我相信)是一個類似的認證端點,客戶端用它的憑證命中並獲得一個令牌。

因此,
i)創建一個註冊表/控制檯,客戶可以註冊並獲得他的憑證。看看this
ii)定義一個HTTP端點,其中用戶交換他的憑證作爲訪問令牌+刷新令牌。
iii)客戶端可以使用訪問令牌來訪問資源端點,以便對任何端點進行認證調用。
iv)在後端,您需要一個通用服務來驗證令牌並從中提取信息。

PS - 這只是一個最小的系統,會有很多安全考慮,比如一些未經授權的應用訪問某些客戶端的訪問令牌。
您可以找到許多有關CSRF攻擊,noonces,時間戳和其他緩解安全問題的方法的信息。

10

在oAuth 2.0中,有幾種類型的授權類型。授予類型只是交換訪問令牌的某種憑證的一種方式。通常,oAuth使用授權代碼授權來引用第三方的使用。這意味着將用戶重定向到資源所有者的網站進行認證,這將返回授權碼。

由於您是資源所有者,因此對於第一方使用oAuth顯然沒有意義。 oAuth 2.0已經考慮到了這一點,併爲此包含了資源所有者密碼憑據授權。在這種情況下,您可以在第一方級別爲訪問令牌交換用戶名和密碼。

查看http://tools.ietf.org/html/rfc6749#section-4.3瞭解更多詳情。

2

只是要清楚與原題:

OAuth2用戶至少需要一個客戶端和服務器

OP想知道如何保護REST API,爲什麼大家都在談論第三方認證供應商(谷歌,Facebook,...)

這裏有2個不同的需求:

1 - 能夠確保個人API(ourdomain.com)

Client    Server 
Consumers <----> Your API 

2 - 能消耗公共API(例如獲取用戶的谷歌聯繫人列表)

Client    Server 
You  <----> Google APIs 

OP實際需要的1:實現自己的API的前OAuth2用戶服務器。
many existing implementations for all languages/frameworks on Github

最後,這裏是one nice Oauth2 technical explanation,而我無恥地利用其架構的一個位置:

Google OAuth2 schema

不,我不是在谷歌的工作,我只是服用Google作爲公共API供應商的例子。

+0

Pierre,我有一個問題。我正在考慮構建一個2服務器API系統。基本上,API用戶檢索令牌並將其與每個API調用一起傳遞給API用戶的優勢是什麼?API用戶只是在每次API調用時提供密碼(或永久密鑰)? – Dave 2017-02-24 18:45:07

+0

使用令牌時,密碼不會被網絡傳輸,因此不會被盜取。令牌總是在變化,所以它很難被重複使用,如果被盜 – 2017-02-25 13:06:06

+0

但仍然,密碼必須傳輸一次才能獲得令牌,對嗎?至少還有一個可見點。如果我的理解正確,那麼只有當組織增加了安全程序,其中一個開發人員部署了OAuth令牌並且所有其他開發人員都通過令牌批准了傳入的請求,以便多個程序員不能直接查看密碼。 (處理OAuth服務器的實體需要擁有最高機密許可或其他內容)那麼是時候進行2因素認證了。 – Dave 2017-03-06 17:25:43