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

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

自社用に簡易 SFA システムを構築してみると言う事になり、今回はオンプレミスではイケなさそうですので認証システムを OAuth2 で作って見ようという試み..

認証を受ける側というのは何度か試してみたのだけれども、今までの認証する側というのは Apache の Digest 認証で賄ってきました
でも、折角なので OAuth2 で行ってみよう!と言う事にしました ^^/

はじめ

最初は、WordPress の プラグインで認証でも良いのかな?なんて思ってました
でも、環境がおかしいのか解らないのですが、上手くインストールする事が出来ない…
# OAuth1 のは動いてましたけど、OAuth2 のプラグインが何かが邪魔して動かない…

利用者も余り多くないので、数人で運営できる程度でも良いので、bshaffer/oauth2-server-php を利用してみる事にしました

oauth2-server-php のブランチは master と言うのを拾ってきました
CHANGELOG.md には * 1.9.0 (2016-01-06) と書いてあります

https://bshaffer.github.io/oauth2-server-php-docs/cookbook/
ここに書いてある、クックブック に倣って、とりあえず動くまで!を試してみよう!

データーベース

完成したシステムの運営は さくらインターネットのレンタルサーバーを利用しようと目論んでいますので、データベースエンジンは MySQL を想定しています

まだ、評価中ですので Ubuntu 16.04.3 LTS に LAMP と OpenSSL をインストールして、いつもの環境を VMware 上に用意しています
ついでに、メンテナンスしやすそうなので phpMyAdmin も入れてみました

最初に データーベースを用意します
文字コードに 4バイトの Unicode が指定できる様になったらしいので、ためしに設定してみた ^^;

mysql> create database oauth2test character set utf8mb4;

クックブックのページに従って、次の様にテーブルを用意しました

mysql> use oauth2test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_oauth2test      |
+---------------------------+
| oauth_access_tokens       |
| oauth_authorization_codes |
| oauth_clients             |
| oauth_jwt                 |
| oauth_refresh_tokens      |
| oauth_scopes              |
| oauth_users               |
+---------------------------+
7 rows in set (0.00 sec)

で、テスト用のユーザーを一人分登録します

INSERT INTO oauth_clients (client_id, client_secret, redirect_uri) VALUES ("testclient", "testpass", "http://fake/");

テーブルは、クックブックに SQL で書いてあるので、テキストに落として実行しても良し!コピペして phpMyAdmin で実行しても良し…

oauth サーバーオブジェクトの用意

クックブックに server.php のソースが載っていますので、そのままコピペして保存します
もちろん、<?php ~ ?> で囲みます

$dsn = 'mysql:dbname=oauth2test;host=localhost';
$username = 'root';
$password = 'XXXXXXXX';

これは、さっき作ったデータベースにアクセス出来る様に指定します
.

トークンコントローラーの用意

token.php と言うファイルを用意し、そのままコピペします
curl を使って、動作確認出来るようです

user@ubuntuSFAScratch:~$ curl -u testclient:testpass http://172.16.XXX.XXX/sfa/token.php -d 'grant_type=client_credentials'
{
  "access_token":"45975b1f0a0c29444617dda5c64fb37469baXXXX",
  "expires_in":3600,
  "token_type":"Bearer",
  "scope":null
}
user@ubuntuSFAScratch:~$

こんな感じで、アクセストークンが入手出来ます
 

リソースコントローラーの用意

resource.php というファイルを用意して、そのままコピペします
さっきのアクセストークンで、アクセスできるか確認してみます

user@ubuntuSFAScratch:~$ curl http://172.16.XXX.XXX/sfa/resource.php -d 'access_token=45975b1f0a0c29444617dda5c64fb37469baXXXX'
{
  "success":true,
  "message":"You accessed my APIs!"
}

サクセス:true で良い様です!
 

オーソライズコントローラーの用意

これも同様に authorize.php と言うファイルを用意して、コピペします

認証しますか?はい・いいえ
の表示がされますので、yes を選択すると、code が発行されます

生きてる時間が短いので、ブラウザーのアドレスに
http://172.16.XXX.XXX/sfa/authorize.php?response_type=code&client_id=testclient&state=xyz
と入力すると、ソースにあるメッセージを表示されます
yes を選択すると
SUCCESS! Authorization Code: 71d8222df62ce7564e7063112b7545cc787fXXXX
と、コードが発行されます
no を選択すると、ユーザー登録で作った redirect_uri へ引数付きでリダイレクトされます(この例では http://fake/)
このコードは、テーブルに記録されています
.

リダイレクト先の指定とかリフレッシュトークンの渡し方とか、まだ調べていませんし…
調べる事、一杯在るな….
トークンの期限とか…

続く..

コメントを残す

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


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