鍍金池/ 問答/PHP/ OAuth2.0密碼授權(quán)模式中,client_id是什么的id?

OAuth2.0密碼授權(quán)模式中,client_id是什么的id?

有博客是這樣解釋的密碼模式:

密碼模式(resource owner password credentials):
用戶向第三方客戶端提供自己在授權(quán)服務(wù)端的用戶名和密碼,客戶端通過用戶提供的用戶名和密碼向授權(quán)服務(wù)端請求令牌(Access Token)。

Laravel使用密碼授權(quán)的方式需要提交的參數(shù)如下:

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'taylor@laravel.com',
        'password' => 'my-password',
        'scope' => '',
    ],
]);



問題:
1、代碼中的client_id是什么id,每個用戶每人有一個client_id還是什么意思?
2、在密碼模式的概念解釋中,涉及到幾個參與者:
(1)用戶
(2)第三方客戶端
(3)授權(quán)服務(wù)端
(4)客戶端
有點分不清上面4個誰是誰,請大佬舉個例子讓它們對號入座。謝謝大佬!

回答
編輯回答
瘋浪

client_id是你這個應(yīng)用在oAuth2網(wǎng)站注冊的應(yīng)用獲得的。

比如騰訊吧,雖然騰訊不一定是密碼模式,但是這里舉個例子。

如果你是一個A網(wǎng)站,需要獲取用戶在騰訊的賬戶信息,那么你需要在騰訊注冊你的應(yīng)用,獲取你的client_id。
這樣在認證的時候,騰訊的OAuth就可以區(qū)分這個用戶授權(quán)了哪些應(yīng)用(你的A網(wǎng)站或者別人的B網(wǎng)站)。

A網(wǎng)站和B網(wǎng)站都有各自的client_id,騰訊根據(jù)這個id來區(qū)分用戶給予的授權(quán)

當然了,為了防止偽造,還會另外有一個clinet_secret用于確認你使用的client_id確實是你這個網(wǎng)站所持有的。

還有你所不理解的幾個參與者。
還是以上面的例子解釋。

  • 用戶 是騰訊的用戶,A網(wǎng)站或者B網(wǎng)站需要用戶的授權(quán)來獲取用戶的騰訊賬戶的信息。
  • 第三方客戶端 就是A網(wǎng)站或者B網(wǎng)站的手機APP(網(wǎng)頁)之類的。
  • 授權(quán)服務(wù)端 就是指騰訊啦
  • 客戶端 就是指A網(wǎng)站或者B網(wǎng)站的服務(wù)器

至于為什么要分成第三方客戶端客戶端,這個主要是為了secret_id保密,如果你的secret_id直接寫在用戶應(yīng)用當中,那么誰都可以用你的A網(wǎng)站的身份去獲取用戶的信息了。所以secret_id只能保存在后臺。

所以在這里可以理解成客戶端就是指A網(wǎng)站的服務(wù)器,在面對騰訊的Oauth授權(quán)的情況下,騰訊是授權(quán)服務(wù)端,A網(wǎng)站后臺是授權(quán)的客戶端。


暫時就寫這么點,有說錯或者還有不理解的話后面再補充

2017年3月25日 21:52
編輯回答
青黛色

第二個問題
以某小游戲支持微信登錄舉例:
(1)用戶:你
(2)第三方客戶端:小游戲
(3)授權(quán)服務(wù)端:微信
(4)客戶端:這里說的就是第三方客戶端,也就是小游戲

密碼模式就是你在小游戲里面輸入微信的賬號密碼,然后小游戲拿著這個去向微信要token,然后小游戲用這個token去訪問微信的api以獲取你的信息或資源(所以這種方式是不太推薦的,因為你的微信賬號密碼告訴了第三方小游戲)


第一個問題
client_id 就是小游戲向微信注冊時微信給的,表示小游戲身份的 id
client_secret 就是對應(yīng)的秘鑰啦

2017年3月7日 08:32