質問編集履歴
1
質問内容が曖昧だったので詳細を追記。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
Laravel Passportを使用してログインユーザーの情報を取得したい
|
body
CHANGED
@@ -1,37 +1,40 @@
|
|
1
|
-
##
|
1
|
+
## 現状
|
2
|
+
Laravel Passportをインストールすることで
|
2
|
-
|
3
|
+
他アプリケーションから、Laravelに登録されたユーザーのアクセストークン取得、
|
3
|
-
|
4
|
+
アクセストークンからユーザ情報取得まで行なっております。
|
5
|
+
Postmanで実行するとJSONにてユーザー情報取得できました。
|
4
6
|
|
5
|
-
|
7
|
+
##構成
|
6
8
|
PHP8, MYSQL8
|
7
9
|
A : http://exampleA.com : laravel8
|
8
10
|
B : http://exampleB.com : laravel以外、CMSなど
|
9
11
|
|
10
|
-
|
12
|
+
## 何がしたいか
|
11
|
-
|
13
|
+
laravel Passport の公式ドキュメントなどみたのですが、認可コードからアクセストークンを取得する際、
|
14
|
+
テストコードでは事前にClient_id, Client_secret,redirect_urlを設定しておりますが、
|
12
|
-
|
15
|
+
この値はユーザー毎に変化するかと思われます。
|
13
16
|
|
17
|
+
そこで、Aにログインしているユーザ情報からClient情報(id,secret,redirect_url)を取得できればと思い、
|
18
|
+
APIにてユーザ情報を取得するAPI:getを記述し、Bから実行したのですが(既にAでログイン済)
|
19
|
+
ドメインが異なるのか、ログインユーザーの情報が取得できませんでした。
|
20
|
+
|
21
|
+
既にログインされているシステムのユーザー情報を別のドメインからアクセストークンなどを使用せずに、取得できるのでしょうか?
|
22
|
+
|
14
23
|
過去質問も一度読んでみたのですが、
|
15
24
|
- ドメインが異なる
|
16
25
|
- 既にLaravel Passport を実装している
|
17
|
-
|
18
26
|
ことからこちらの求めている質問と違うものかと感じました。
|
19
27
|
[teratail:Lalavel でログインしているか外部から確認したい](https://teratail.com/questions/97773)
|
20
28
|
|
21
|
-
## 現状
|
22
|
-
Laravel Passportをインストールすることで
|
23
|
-
他アプリケーションからのLaravelに登録されたユーザー情報を取得する
|
24
|
-
アクセストークン取得まで行なっております。
|
25
|
-
Postmanで実行するとJSONにてユーザー情報取得も可能です。
|
26
|
-
|
27
29
|
##やってみたこと
|
28
|
-
1. 先にlaravelでログインし、routes/api.php にてapiを書いてBのシステムから実行してみたのですが、
|
30
|
+
1. 先にAのlaravelでログインし、routes/api.php にてapiを書いてBのシステム上からAのlaravelに向けて実行してみたのですが、ログイン画面が表示されユーザー情報の取得はできませんでした。
|
29
|
-
ログイン画面が表示されユーザー情報の取得はできませんでした。
|
30
31
|
|
31
32
|
2. 将来的にサードパーティCookieは使用できなくなる可能性があるとは聞いていましたが、
|
33
|
+
Aのlaravel内にてクライアント情報のCookieを発行し、BのlaravelからCookieを取得することでアクセストークンを取得、
|
32
|
-
laravel
|
34
|
+
アクセストークンから Aのlaravelにアクセスしてユーザー情報取得はできました。
|
33
35
|
|
34
36
|
## コード
|
37
|
+
A: laravelに記載
|
35
38
|
``` php
|
36
39
|
//routes/api.php
|
37
40
|
use App\Http\Controllers\AuthJudgeController;
|
@@ -59,7 +62,7 @@
|
|
59
62
|
}
|
60
63
|
}
|
61
64
|
```
|
62
|
-
Laravel Passport使用のため`api` : driverを`passport`に変更。
|
65
|
+
A:Laravel Passport使用のため`api` : driverを`passport`に変更。
|
63
66
|
``` php
|
64
67
|
//config/auth.php
|
65
68
|
'guards' => [
|
@@ -73,4 +76,36 @@
|
|
73
76
|
'provider' => 'users',
|
74
77
|
],
|
75
78
|
],
|
79
|
+
```
|
80
|
+
|
81
|
+
B:クライアント 認可コードからアクセストークンを取得する
|
82
|
+
``` php
|
83
|
+
<?php
|
84
|
+
//
|
85
|
+
require 'vendor/autoload.php';
|
86
|
+
use GuzzleHttp\Client as Client;
|
87
|
+
$http = new Client;
|
88
|
+
|
89
|
+
if($_GET['code']){
|
90
|
+
//理想はアクセストークンを取得前にログイン中のUserIdからclient情報を取得したいが
|
91
|
+
//実行後にログイン画面が表示
|
92
|
+
//ユーザーに対して、それぞれclient_id,client_secret,redirect_uriが必要。
|
93
|
+
$client = $http->request('GET','http://127.0.0.1:8080/api/auth_client',[]);
|
94
|
+
|
95
|
+
//トークンエンドポイントにアクセスすることでアクセストークンを取得
|
96
|
+
$response = $http->post('http://127.0.0.1:8080/oauth/token',[
|
97
|
+
'form_params' => [
|
98
|
+
'grant_type' => 'authorization_code',
|
99
|
+
'client_id' => $client->id,
|
100
|
+
'client_secret' => $client->secret,
|
101
|
+
'redirect_uri' => $client->redirect,
|
102
|
+
'code' => $_GET['code'],
|
103
|
+
],
|
104
|
+
]);
|
105
|
+
|
106
|
+
$res = json_decode((string)$response->getBody(), true);
|
107
|
+
echo "access_token: ".$res['access_token'] ."<br>";
|
108
|
+
echo "<br>認可コード:".$_GET['code']."<br><br>";
|
109
|
+
}
|
110
|
+
|
76
111
|
```
|