Develop環境でのDoorkeeper(OAuth2)検証手順 - fjordllc/bootcamp GitHub Wiki
概要
- BootcampアプリをOAuth2 Providerとして利用し、クライアントアプリからのログインとAPIアクセスを確認する流れをまとめました
- 以下のPRを参考にしつつ追記&整理しています
必要なもの
- Bootcampアプリ(OAuth Provider)
- クライアントアプリ(doorkeeper-client)
- doorkeeper-client をcloneして立ち上げる
- ポートはなんでも良いがここでは3001とする
- API確認ツール(いずれか)
curl- Talend API Tester
- Chrome拡張機能でAPIの検証に便利なツール
セットアップ
1. クライアント準備
git clone https://github.com/MikotoMakizuru/doorkeeper-client
cd doorkeeper-client
.env を作成し、以下を設定する。
DOORKEEPER_APP_ID=""
DOORKEEPER_APP_SECRET=""
DOORKEEPER_APP_URL="http://localhost:3000"
2. OAuthアプリ作成(Bootcamp側)
FBCアプリを立ち上げ、管理者でログインし、「OAuth2 Provider」から新規アプリを作成する。
# Bootcamp
bin/rails s
管理者メニューのサイドバーからアクセス
一覧画面 > アプリケーション追加ボタンを押す
新規作成画面で入力
| 項目 | 内容 |
|---|---|
| Name | doorkeeper-client |
| Redirect URL | http://localhost:3001/users/auth/doorkeeper/callback |
| Confidential | 有効 |
| Scopes | read write |
- クライアント(doorkeeper-client)とサーバー(FBC)のScopesが不一致だと
invalid_scopeエラーになるため合わせておく - クライアント(doorkeeper-client)側は
config/initializers/devise.rbを修正する
config.omniauth :doorkeeper,
ENV["DOORKEEPER_APP_ID"],
ENV["DOORKEEPER_APP_SECRET"],
scope: "read write", #ここをサーバー側と合わせる
strategy_class: OmniAuth::Strategies::Doorkeeper
作成後、Application IDとSecretを.envに設定する。
DOORKEEPER_APP_ID="取得したApplication ID"
DOORKEEPER_APP_SECRET="取得したSecret"
3. クライアント(doorkeeper-client)側のアプリサーバーを起動
bin/rails s -p 3001
4. OAuthログイン確認
- http://localhost:3001 にアクセスする
- 「BootCampログイン」をクリックする
- Bootcampのログイン画面に遷移することを確認する
- Bootcampで任意のユーザーでログインを行う
- http://localhost:3001 に再度アクセスし、2.と同様に「BootCampログイン」をクリックする
- 認可画面で「承認」を選択する
- クライアント側でログイン状態になれば成功。
rails consoleを起動し、User.allを実行してログインしたユーザが存在していることを確認
API検証
1. アクセストークン確認
セットアップ後、クライアント側で以下を実行する。
User.find_by(name: 'kimura').doorkeeper_access_token
2. API動作確認
Talend API Testerまたはcurlのどちらかで検証可能する - サンプルとしてコメントのCRUDをチェックする
コメント一覧(GET)
curl
curl -X GET "http://localhost:3000/api/comments?commentable_type=Report&commentable_id=701335546" \
-H "Authorization: Bearer {TOKEN}"
Talend API Tester
-
Method: GET
-
URL: http://localhost:3000/api/comments?commentable_type=Report&commentable_id=701335546
-
Headers:
- Authorization: Bearer {TOKEN}
-
「SEND」を押下
コメント作成(POST)
curl
curl -X POST "http://localhost:3000/api/comments?commentable_type=Report&commentable_id=701335546" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"comment": {
"description": "sample comment"
}
}'
Talend API Tester
-
Method: POST
-
URL: http://localhost:3000/api/comments?commentable_type=Report&commentable_id=701335546
-
Headers:
- Authorization: Bearer {TOKEN}
- Content-Type: application/json
-
Body:
{
"comment": {
"description": "sample comment"
}
}
- 「SEND」を押下
コメント更新(PATCH)
curl
curl -X PATCH "http://localhost:3000/api/comments/{COMMENT_ID}" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"description": "update"
}'
Talend API Tester
-
Method: PATCH
-
URL: [http://localhost:3000/api/comments/{COMMENT_ID}](http://localhost:3000/api/comments/{COMMENT_ID})
-
Headers:
- Authorization: Bearer {TOKEN}
- Content-Type: application/json
-
Body:
{
"description": "update"
}
- 「SEND」を押下
コメント削除(DELETE)
curl
curl -X DELETE "[http://localhost:3000/api/comments/{COMMENT_ID}](http://localhost:3000/api/comments/%7BCOMMENT_ID%7D)" \
-H "Authorization: Bearer {TOKEN}"
Talend API Tester
-
Method: DELETE
-
Headers:
- Authorization: Bearer {TOKEN}
-
「SEND」を押下