記一次使用Oauth的情況

lmdfx發表於2020-09-17

1.Oauth角色

  • 資源伺服器(resource server)
  • 授權伺服器(authorization server)
  • 資源所有者(resource owner)
  • 客戶端(Client)

    2.Oauth授權模式

  • 授權碼模式
  • 簡化模式
  • 密碼模式
  • 客戶端模式

    3.業務邏輯(授權碼模式)

    使用者第一次進入客戶端首頁,先驗證是否登入,如果沒有登入則跳轉至服務端授權登入
    //使用者沒有登入則去進行Oauth授權登入
    if(!$user){
    return (new SSoController())->index($request);
    }
    //使用者已登入則處理下面的邏輯
    ...
    進入index()方法,檢查有沒有code,沒有code的話,則構建authorize請求,去獲取code,這時,認證服務中心判斷使用者是否登入,沒登入,登入使用者認證服務中心的賬號密碼,登入成功之後,返回一個臨時code
    $url = "$this->authorize_url?client_id=$this->client_id&redirect_uri=$this->callback&response_type=code";
    header('Location: '.$url);
    exit;
    請求之後,授權伺服器會重定向到我們$url裡面的redirect_uri這裡地址並帶上我們code,這個地址也就是我們的應用入口地址,這時重複上面步驟,有code之後,則構建認證請求
    $url = "$this->access_token_url?client_id=$this->client_id&client_secret=$this->client_secret&redirect_uri=$this->callback&code=$code&grant_type=authorization_code";
    $result = $this->curl_get_https($url);
    認證服務中心返回該使用者的token,我們拿到token,去資源服務中心獲取使用者資訊,拿到使用者資訊比對本地使用者資料,符合期望讓他本地登入成功。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
心之所向,素履以往。

相關文章