2012-08-28 100 views
11

我有一個提供API的應用程序。這個應用程序是一個OAuth2提供程序。OAuth2中客戶端密鑰的用途是什麼?

我想用僅客戶端應用程序訪問此API(請閱讀&)。我正在使用JSO來使這更容易。

它很好用。

事情是,我不必在任何地方輸入我的客戶機密鑰(我在應用程序中註冊的應用程序的密碼)。而且我明白爲什麼,那麼任何人都可以使用它。

因此,如果我可以在沒有客戶機密的情況下訪問我的api,您能向我解釋它的目的是什麼?

+0

另請參見[如果不需要使用OAuth2中的客戶端祕密,它有什麼意義?](https://security.stackexchange.com/questions/76351/whats-the-point-of -o-client-secret-in-oauth2-if-it-doesnt-need-to-be-used) – user

回答

6

Client OAuth在OAuth 1.0中用於簽署請求,因此它是必需的。某些OAuth2服務器(例如Google Web Server API)要求發送客戶端密鑰以接收訪問令牌(來自請求令牌或刷新令牌)。

OAuth 2.0顯着減少了客戶機密鑰的作用,但它仍然用於使用它的服務器。

+0

好的,所以不要傳遞它不是一個安全問題? – Robin

+0

只要您與之通話的OAuth服務器不需要它,那麼請不要擔心。 –

+0

事情是,OAuth服務器是我的,所以總有機會我搞砸了^^。但由於我使用守門人,這似乎是一個很好的寶石,我不會擔心它。我仍然想更好地理解爲什麼它不再真正使用,但仍然存在... – Robin

-3

這也讓我瘋狂,直到我看到一個讓問題變得非常明顯的例子。

我必須登錄到服務器之前服務器將返回授權訪問我的東西的令牌。

換句話說,如果我沒有與服務器有效的登錄會話,服務器會向我展示登錄屏幕。這就是爲什麼解釋總是說「這取決於服務器進行身份驗證」。

當然,服務器並不一定要求我登錄。這是現實嗎? Dropbox是否真的將訪問我的文件給任何沒有登錄的人?當然不是。我讀過的大部分解釋都表達了這一點,就好像它並不重要,但實際上它是唯一重要的事情。

+2

我認爲你混淆client_secret和認證代碼。後者是在用戶授予許可後返回的(不過這是實現的)。然後它被用來請求一個access_token。 – AaronHS

8

This discussion提供了一個很好的解釋,爲什麼客戶端祕密對於服務器端應用比客戶端應用更重要。摘錄:

Web應用程序[服務器端應用程序]使用客戶端機密,因爲它們代表巨大的攻擊媒介。讓我們說有人給一個DNS入口毒害,並建立一個「相似」的流氓應用程序,這個並列可能會在幾個月內不被注意,這個中間人吮吸大量的數據。客戶端祕密應該可以緩解這種攻擊媒介。對於單用戶客戶來說,妥協一次只能有一個設備,相比之下,效率非常低。

相關問題