我有一個提供API的應用程序。這個應用程序是一個OAuth2提供程序。OAuth2中客戶端密鑰的用途是什麼?
我想用僅客戶端應用程序訪問此API(請閱讀&)。我正在使用JSO來使這更容易。
它很好用。
事情是,我不必在任何地方輸入我的客戶機密鑰(我在應用程序中註冊的應用程序的密碼)。而且我明白爲什麼,那麼任何人都可以使用它。
因此,如果我可以在沒有客戶機密的情況下訪問我的api,您能向我解釋它的目的是什麼?
我有一個提供API的應用程序。這個應用程序是一個OAuth2提供程序。OAuth2中客戶端密鑰的用途是什麼?
我想用僅客戶端應用程序訪問此API(請閱讀&)。我正在使用JSO來使這更容易。
它很好用。
事情是,我不必在任何地方輸入我的客戶機密鑰(我在應用程序中註冊的應用程序的密碼)。而且我明白爲什麼,那麼任何人都可以使用它。
因此,如果我可以在沒有客戶機密的情況下訪問我的api,您能向我解釋它的目的是什麼?
Client OAuth在OAuth 1.0中用於簽署請求,因此它是必需的。某些OAuth2服務器(例如Google Web Server API)要求發送客戶端密鑰以接收訪問令牌(來自請求令牌或刷新令牌)。
OAuth 2.0顯着減少了客戶機密鑰的作用,但它仍然用於使用它的服務器。
這也讓我瘋狂,直到我看到一個讓問題變得非常明顯的例子。
我必須登錄到服務器之前服務器將返回授權訪問我的東西的令牌。
換句話說,如果我沒有與服務器有效的登錄會話,服務器會向我展示登錄屏幕。這就是爲什麼解釋總是說「這取決於服務器進行身份驗證」。
當然,服務器並不一定要求我登錄。這是現實嗎? Dropbox是否真的將訪問我的文件給任何沒有登錄的人?當然不是。我讀過的大部分解釋都表達了這一點,就好像它並不重要,但實際上它是唯一重要的事情。
我認爲你混淆client_secret和認證代碼。後者是在用戶授予許可後返回的(不過這是實現的)。然後它被用來請求一個access_token。 – AaronHS
This discussion提供了一個很好的解釋,爲什麼客戶端祕密對於服務器端應用比客戶端應用更重要。摘錄:
Web應用程序[服務器端應用程序]使用客戶端機密,因爲它們代表巨大的攻擊媒介。讓我們說有人給一個DNS入口毒害,並建立一個「相似」的流氓應用程序,這個並列可能會在幾個月內不被注意,這個中間人吮吸大量的數據。客戶端祕密應該可以緩解這種攻擊媒介。對於單用戶客戶來說,妥協一次只能有一個設備,相比之下,效率非常低。
另請參見[如果不需要使用OAuth2中的客戶端祕密,它有什麼意義?](https://security.stackexchange.com/questions/76351/whats-the-point-of -o-client-secret-in-oauth2-if-it-doesnt-need-to-be-used) – user