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 でも認証できる様子 ^^; もうちょっと調べないとかな?…
.
多分、次はスコープを調べる予定…