laravel8にてOAuthを使用したサーバーを構築したいので、laravel passportをインストールしたのですが、
クライアントアプリにアクセストークン表示を目的にしておりますが表題通り進まないため、質問になります。
一度laravel6にて確認したところ、問題なく認証画面が表示、アクセストークンからユーザ情報取得までできました。
よろしくお願いいたします。
##開発環境
- docker
- nginx
- php7.3
- mysql5.7
- phpmyadmin
- composer
参考にしたURL
操作した内容
認可サーバー(アクセストークンを返すサーバー) localhost:8080
クライアントアプリ(接続元:アクセストークンを画面上に表示) 127.0.0.1:8800
php artisan migrate
php artisan passport:install
暗号化キーを作成- AuthServiceProvider boot()メソッド内に追記
config/auth.php
構成ファイルを修正php artisan passport:install
php artisan passport:client
実行し、テストクライアントを登録
(userId:3 , リダイレクトurl: http://127.0.0.1:8800/api/call.php を設定
client_secret: ycSOk6b2SbKH9VpRUUT9v3Ty9kufYiSUI5VrIprO)
7. 127.0.0.1:8800/redirect アクセス後、ログイン画面が表示され、
登録したユーザーでログイン完了後、画面上に
{"error":"invalid_client", "error_description":"Client authentication failed", "message":"Client authentication failed"} ```と表示されます。 クライアントに登録されている情報が異なるのかと思われますが、どこが間違っているかわかりません。 ## ソースコード クライアントアプリから呼び出す oauth.php ``` php <?php require 'vendor/autoload.php'; use GuzzleHttp\Client as Client; $guzzle = new Client; $query = http_build_query([ 'client_id' => '3', 'redirect_uri' => 'http://localhost:3000/api/call.php', 'response_type' => 'code', 'scope' => '', ]); //認証確認画面にリダイレクト header('Location: http://localhost:8080/oauth/authorize?'.$query);
call.php
php
1<?php 2require 'vendor/autoload.php'; 3use GuzzleHttp\Client as Client; 4 5$http = new Client; 6 7if($_GET['code']){ 8 $response = $http->post('http://127.0.0.1:8080/oauth/token',[ 9 'form_params' => [ 10 'grant_type' => 'authorization_code', 11 'client_id' => '3', 12 'client_secret' => 'ycSOk6b2SbKH9VpRUUT9v3Ty9kufYiSUI5VrIprO', 13 'redirect_uri' => 'http://localhost:3000/api/call.php', 14 'code' => $_GET['code'], 15 ], 16 ]); 17 18 $res = json_decode((string)$response->getBody(), true); 19 echo $res['access_token']; 20} 21
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。