質問編集履歴
2
質問内容を整理
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
o
|
1
|
+
oAuth2の実装につきまして
|
test
CHANGED
@@ -1,48 +1,50 @@
|
|
1
1
|
いつも大変お世話になっております。
|
2
|
-
|
3
|
-
以下のような流れのoAuth2を使ったシステムを作っています。
|
4
2
|
|
5
3
|
|
6
4
|
|
7
|
-
|
5
|
+
oAuth2を使うシステムを作っていて、
|
8
6
|
|
9
|
-
(
|
7
|
+
下記の(1)〜(4)の動作の一連の実装&検証済みですが、
|
10
8
|
|
11
|
-
|
9
|
+
(3)において、10秒ではなく、1日後にアクセスした場合、
|
12
10
|
|
13
|
-
|
11
|
+
再度ID/PWのログイン画面が表示されてしまいます。
|
14
12
|
|
15
|
-
|
13
|
+
このログインID/PWが表示されないようにしたいのです。
|
16
14
|
|
17
15
|
|
18
16
|
|
19
|
-
|
17
|
+
'-----------------------------------------
|
20
18
|
|
21
|
-
(
|
19
|
+
(1)A君がサイトB内のリンクをクリック。サイトAに遷移。
|
22
20
|
|
21
|
+
(2)サイトAは、サイトBにoAuth2リクエストをします。
|
22
|
+
|
23
|
+
サイトBのログイン画面が表示されるので、
|
24
|
+
|
23
|
-
|
25
|
+
サイトBのID/PWを入力。その後、権限付与許可を行います。
|
26
|
+
|
27
|
+
サイトAは、上記で発行されたアクセストークンを元に、
|
28
|
+
|
29
|
+
サイトBのデータを取得し、それを元にレポート作成します。
|
24
30
|
|
25
31
|
|
26
32
|
|
27
|
-
|
33
|
+
(3)10秒ほど間隔をおいて、A君はふたたび(1)と同じリンククリック
|
28
34
|
|
29
|
-
|
35
|
+
(4)(2)で権限をもらっているので、ログインID/PWをつかってログインすることなく、レポートが作成される。
|
36
|
+
|
37
|
+
'-----------------------------------------
|
30
38
|
|
31
39
|
|
32
40
|
|
33
|
-
ただ、(3)で1日おいたとすると、再度ID/PWのログイン画面が表示されてしまいます。
|
34
|
-
|
35
|
-
このログインID/PWが表示されないようにしたいのですが、
|
36
|
-
|
37
|
-
リフレッシュトークンをつかって、トークンを最新化することで、ID/PWが表示されないように
|
38
|
-
|
39
|
-
できる形にないますでしょうか。
|
40
41
|
|
41
42
|
|
42
43
|
|
43
|
-
https://github.com/thephpleague/oauth2-clientに記載の
|
44
44
|
|
45
|
-
|
45
|
+
ソースは、[https://github.com/thephpleague/oauth2-client](https://github.com/thephpleague/oauth2-client)のコードを使っていますが、どの部分を改修すればよいでしょうか。
|
46
|
+
|
47
|
+
|
46
48
|
|
47
49
|
```
|
48
50
|
|
@@ -186,88 +188,8 @@
|
|
186
188
|
|
187
189
|
```
|
188
190
|
|
189
|
-
1点目の質問は、リフレッシュするコードはどこに、どのように差し込めばよろしいでしょうか。
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
また、リフレッシュトークンの取得は、前述githubの以下のコード記載部分で、
|
194
|
-
|
195
|
-
「自身のDBにアクセスして、アクセストークンを取得し、
|
196
|
-
|
197
|
-
有効期限をチェック、有効期限がきれていたら、
|
198
|
-
|
199
|
-
リフレッシュトークンを元に、新しいアクセストークンを取得します」
|
200
|
-
|
201
|
-
というような記載がありました。
|
202
|
-
|
203
|
-
````
|
204
|
-
|
205
|
-
$existingAccessToken = getAccessTokenFromYourDataStore();
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
if ($existingAccessToken->hasExpired()) {
|
210
|
-
|
211
|
-
$newAccessToken = $provider->getAccessToken('refresh_token', [
|
212
|
-
|
213
|
-
'refresh_token' => $existingAccessToken->getRefreshToken()
|
214
|
-
|
215
|
-
]);
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
// Purge old access token and store new access token to your data store.
|
220
|
-
|
221
|
-
}
|
222
|
-
|
223
|
-
```
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
ここで、また2点不明点あります。
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
1点目は、自身のデータストアからアクセストークンを取得しますが、
|
232
|
-
|
233
|
-
A君である、キーとなる情報が、アプリAのサイトでは管理していないのと、
|
234
|
-
|
235
|
-
(1)または(3)でクリックされたGETには存在しないので
|
236
|
-
|
237
|
-
どのユーザかわかるのは、以下の時点になるかと思います。
|
238
|
-
|
239
|
-
```
|
240
|
-
|
241
|
-
$resourceOwner = $provider->getResourceOwner($accessToken);
|
242
|
-
|
243
|
-
```
|
244
|
-
|
245
|
-
ただ、この時点では、ID/PW認証が表示されてしまいますので、これより前でリフレッシュやる必要があるかと思います。
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
認証後、2回めからは、ログインID/PWが表示されないようできるシステムがありますが、
|
250
|
-
|
251
|
-
それと同じようにするには、上記のコードをどうしたらよいでしょうか。。。
|
252
191
|
|
253
192
|
|
254
193
|
|
255
194
|
|
256
|
-
|
257
|
-
2点目は、自身のデータストアからアクセストークンを取得するとありますが、
|
258
|
-
|
259
|
-
アクセストークンの保存、または復元ですが、
|
260
|
-
|
261
|
-
アクセストークンオブジェクトをまるごとphpでシリアライズして保存して、
|
262
|
-
|
263
|
-
復元は、それをデシリアライズで実装となるになりますでしょうか。
|
264
|
-
|
265
|
-
それとも、アクセストークンとリフレッシュトークンと有効期限それぞれを
|
266
|
-
|
267
|
-
DBにもたせる形になりますでしょうか。
|
268
|
-
|
269
|
-
前者につきましてそういったことがPHP仕様的に可能なのでしょうか。
|
270
|
-
|
271
|
-
|
272
|
-
|
273
195
|
お手数をお掛けしますが、何卒、よろしくお願い致します。
|
1
文言一部修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -186,13 +186,19 @@
|
|
186
186
|
|
187
187
|
```
|
188
188
|
|
189
|
-
リフレッシュするコードはどこに、どのように差し込めばよろしいでしょうか。
|
189
|
+
1点目の質問は、リフレッシュするコードはどこに、どのように差し込めばよろしいでしょうか。
|
190
|
-
|
191
|
-
|
192
|
-
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
-
また、
|
193
|
+
また、リフレッシュトークンの取得は、前述githubの以下のコード記載部分で、
|
194
|
+
|
194
|
-
|
195
|
+
「自身のDBにアクセスして、アクセストークンを取得し、
|
196
|
+
|
197
|
+
有効期限をチェック、有効期限がきれていたら、
|
198
|
+
|
195
|
-
|
199
|
+
リフレッシュトークンを元に、新しいアクセストークンを取得します」
|
200
|
+
|
201
|
+
というような記載がありました。
|
196
202
|
|
197
203
|
````
|
198
204
|
|
@@ -218,9 +224,15 @@
|
|
218
224
|
|
219
225
|
|
220
226
|
|
227
|
+
ここで、また2点不明点あります。
|
228
|
+
|
229
|
+
|
230
|
+
|
221
|
-
|
231
|
+
1点目は、自身のデータストアからアクセストークンを取得しますが、
|
232
|
+
|
222
|
-
|
233
|
+
A君である、キーとなる情報が、アプリAのサイトでは管理していないのと、
|
234
|
+
|
223
|
-
|
235
|
+
(1)または(3)でクリックされたGETには存在しないので
|
224
236
|
|
225
237
|
どのユーザかわかるのは、以下の時点になるかと思います。
|
226
238
|
|
@@ -230,13 +242,31 @@
|
|
230
242
|
|
231
243
|
```
|
232
244
|
|
233
|
-
|
234
|
-
|
235
|
-
|
245
|
+
ただ、この時点では、ID/PW認証が表示されてしまいますので、これより前でリフレッシュやる必要があるかと思います。
|
236
|
-
|
246
|
+
|
247
|
+
|
248
|
+
|
237
|
-
ログインID/PWが表示されないようできるシステムがありますが、
|
249
|
+
認証後、2回めからは、ログインID/PWが表示されないようできるシステムがありますが、
|
238
|
-
|
250
|
+
|
239
|
-
それと同じようにするには、
|
251
|
+
それと同じようにするには、上記のコードをどうしたらよいでしょうか。。。
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
2点目は、自身のデータストアからアクセストークンを取得するとありますが、
|
258
|
+
|
259
|
+
アクセストークンの保存、または復元ですが、
|
260
|
+
|
261
|
+
アクセストークンオブジェクトをまるごとphpでシリアライズして保存して、
|
262
|
+
|
263
|
+
復元は、それをデシリアライズで実装となるになりますでしょうか。
|
264
|
+
|
265
|
+
それとも、アクセストークンとリフレッシュトークンと有効期限それぞれを
|
266
|
+
|
267
|
+
DBにもたせる形になりますでしょうか。
|
268
|
+
|
269
|
+
前者につきましてそういったことがPHP仕様的に可能なのでしょうか。
|
240
270
|
|
241
271
|
|
242
272
|
|