OAuth2.0 Providerを実装したく、OSSを色々と巡ってみて

bshaffer/oauth2-server-phpが使いやすそうだったので触ってみましたー。

今回はAuthorization Code Grantのフローを実装してみました。

構成は以下のとおり。

  • Platform: heroku
  • Database: postgres(Heroku Postgres)
  • Language: php(5.6.11)
  • Web server: Apache(2.4.10)

参考URL→Step-By-Step Walkthrough

インストール

composer.jsonにbshaffer/oauth2-server-phpを追加

で、インストール。

DBのセットアップ

Postgresで以下のSQLを実行します。

クライアントID、シークレットは以下のようなSQLでレコードを突っ込んでおきます。

ユーザも作成しておきます。

passwordはsha1のハッシュ値を入力します。

厳密に言うとoauth_usersテーブル内に保持する必要は無いのですが、Resource Owner Password Credentials Grantを実装する場合は、参照先がoauth_usersなので、クレデンシャルのリポジトリはoauth_usersで統一しておいた方が良い気がします。

画面・処理の作成

アプリケーションルート直下にserver.phpを以下の内容で作成します。

DB(Storageクラス)とスコープ以外は大体同じコードになると思います。

token.phpはこんな感じ

authorze.phpはこんな感じ

「○○へのアクセスを許可します」的な認可のスコープに応じたメッセージを出したい場合は $server->getScopeUtil()->getScopeFromRequest($request) でスコープのリストを取得して、メッセージを表示するようにします。

APIはこんな感じで作ります(今回はapi.phpで作成)

スコープに応じたアクセス許可をする場合は、$server->verifyResourceRequestの$scopeRequiredパラメータに必須のスコープをセットします。

最後にindex.phpにログインフォーム/処理を作ります。

herokuへデプロイ

Procfileは以下のとおり

動作確認

SalesforceのNamed Credentialsで動作確認をしてみます。

認証プロバイダはこんな感じ

oauth2-server-php-sfprovider

postgresのアプリケーションのリダイレクトURIを認証プロバイダのコールバックURLに変更します。

指定ログイン情報はこんな感じ

oauth2-server-php-sf-namedcredential

認証/認可画面はこんな感じに表示されます。

oauth2-server-php-login

oauth2-server-php-authorize

あとはApexで以下のコードを書いて実行してjsonが返ってくればOK。