bshaffer/oauth2-server-php で OAuth2 認証システムを構築してみる その3

この記事は公開されてから時間が経っています

OAuth2 の続き….

User Credentials の使い方について調べてみました

User Credentials の準備


User Credentials を使って認証をするには、server.php で、UserCredentials を追加します

// add the grant type to your OAuth server
$server->addGrantType(new OAuth2\GrantType\UserCredentials($storage));

 

Client Credentials と User Credentials

https://bshaffer.github.io/oauth2-server-php-docs/grant-types/user-credentials/
User Credentials の説明のページにクライアントが Public な時は client_secret を省略出来る と言う様な事が書いてあります

で、このクライアントが Public な場合というのは?と思い、調べてみました….
そうしたら、Storage¥Pdo.php に isPublicClient($client_id) という関数を見付けました ^^/

中身は簡単で、$client_id で oauth_clients テーブルを検索して、client_secret フィールドが空かどうかの真偽値を返しています

return empty($result['client_secret']);

ですので、oauth_clients テーブルの client_secret フィールドを空にすれば、その client_id は Public な状態になります

それと、user_id フィールドには、oauth_users の username と同じものを登録しておくとよい様です

# 既定は 真、ストレージ内の シークレットに関連付けが無い場合は真 って何だと思ったので調べました
# 単純に、シークレット値の値が NULL の場合が public と言う事で、認証時に client_secret を省略出来るので gtant_type=password を指定した場合に 引数のみで認証がとれます!と言う意味だったと言う事で良いのかな….

 

oauth_users の登録


oauth_users の user_name と password にユーザー名とパスワードの sha1 ハッシュ値を登録します

ハッシュ値はこんな感じで計算できます

user@ubuntuSFAScratch:~$ php -a
Interactive mode enabled
 
php > echo sha1('password');
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
php >

で、oauth_users の client_secret にこの 5ba…..fd8 を登録します

これも、ちょっと判らなかったので調べました ^^;

    protected function checkPassword($user, $password)
    {
        return $user['password'] == $this->hashPassword($password);
    }
 
    // use a secure hashing algorithm when storing passwords. Override this for your application
    protected function hashPassword($password)
    {
        return sha1($password);
    }

パスワードの値を sha1 でハッシュ値を計算して返しています
書いてないのでちょっと判らなかった ^^;;

あと、気になるところが hashPassword() にある、コメントの行 !
よりセキュアなアルゴリズムのハッシュ値で強力なパスワードをつかって!って書いてあるのかな ^^;
アプリでオーバーライドしろと書いてある気がする ….

 

動作確認

user@ubuntuSFAScratch:~$ curl http://172.16.XXX.XXX/sfa/token.php -d 'grant_type=password&client_id=usertest&username=usertest&password=password'
{
  "access_token":"5f690eb6a35dadc6c02d55063dfc8487e126XXXX",
  "expires_in":3600,
  "token_type":"Bearer",
  "scope":"user",
  "refresh_token":"4fb016314685c71b85e271b086020abc0b3bXXXX"
}
user@ubuntuSFAScratch:~$

こんな感じで認証してもらえました
# scope はテスト中 ^^

引数の client_id を別のもので確認してみると

user@ubuntuSFAScratch:~$ curl http://172.16.XXX.XXX/sfa/token.php -d 'grant_type=password&client_id=testclient&username=usertest&password=password'
{
  "error":"invalid_client",
  "error_description":"This client is invalid or must authenticate using a client secret"
}
user@ubuntuSFAScratch:~$

キチンと、client is invalid と返ってくるようです ^^b
# user_id が NULL でも認証できる様子 ^^; もうちょっと調べないとかな?…
.


多分、次はスコープを調べる予定…
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。