質問編集履歴
3
試したことを追加。
test
CHANGED
File without changes
|
test
CHANGED
@@ -87,6 +87,8 @@
|
|
87
87
|
|
88
88
|
ログアウトcgiを実行して、https通信でセッションcookieを削除してログインエンドポイントにリダイレクトした際に、このタイミングなのかは不明なのですがcognitoとXSRF-TOKENという名前のcookieが生成されていました。この2つは認可エンドポイントにリクエストした際に、cookieとしてセットされているようなのですが、セッションcookieを削除するまでブラウザの開発者ツールに表示されていませんでした。試しに、cognitoという名前のcookieを削除して再読み込みしたところ、ログイン画面が表示されました。
|
89
89
|
|
90
|
+
セッションCookieとcognito、XSRF-TOKENのドメインがそれぞれ自分独自のドメイン、cognitoユーザープールのドメインになっていることを確認しました。もしかしたら、ドメインが違うためにただ表示されていないだけの可能性もあるのかなと思いました。
|
91
|
+
|
90
92
|
もし何か知りたい情報があれば、できる限りご提供させていただきます。
|
91
93
|
お力添えのほど、何卒よろしくお願いいたします。
|
92
94
|
|
2
ソースコードを追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,6 +10,79 @@
|
|
10
10
|
|
11
11
|
ブラウザからcgiを呼び出して、セッションcookieの削除とログアウトエンドポイントのurlへリダイレクトを実施しました。ログアウトエンドポイントからサインインエンドポイントへのリダイレクトは成功しているのですが、画面がログイン画面に切り替わりません。また、再読み込みをするとセッションcookieが復活してしまいます。
|
12
12
|
|
13
|
+
### ソースコード
|
14
|
+
|
15
|
+
javascriptのsignOut関数をbuttonのonClickに紐づけて、ボタンが押されるとperlで作成したcgiが動作するような仕組みにしました。
|
16
|
+
|
17
|
+
```javascript
|
18
|
+
// サインアウト関数
|
19
|
+
async function signOut() {
|
20
|
+
try {
|
21
|
+
// GETパラメータを作成
|
22
|
+
const params = {
|
23
|
+
client_id: client_id,
|
24
|
+
redirect_uri: 'https://{ドメイン}/oauth2/idpresponse',
|
25
|
+
response_type: 'code',
|
26
|
+
scope: 'openid',
|
27
|
+
};
|
28
|
+
const query = new URLSearchParams(params);
|
29
|
+
|
30
|
+
// CGIを呼び出し
|
31
|
+
const url = `https://{ドメイン}/cgi/logout.cgi?${query}`;
|
32
|
+
await fetch(url, {
|
33
|
+
mode: 'no-cors',
|
34
|
+
});
|
35
|
+
} catch(e) {
|
36
|
+
// エラー処理
|
37
|
+
}
|
38
|
+
}
|
39
|
+
```
|
40
|
+
|
41
|
+
```perl
|
42
|
+
use CGI;
|
43
|
+
|
44
|
+
# ログアウトエンドポイント
|
45
|
+
my $logoutEndpoint = 'https://example.auth.ap-northeast-1.amazon.com/logout';
|
46
|
+
|
47
|
+
my $_q = new CGI();
|
48
|
+
|
49
|
+
# GETパラメータ作成
|
50
|
+
my %paramHash = (
|
51
|
+
client_id => $_Q->param('client_id'),
|
52
|
+
redirect_uri => $_Q->param('redirect_uri'),
|
53
|
+
response_type => $_Q->param('response_type'),
|
54
|
+
scope => $_Q->param('scope')
|
55
|
+
);
|
56
|
+
my $uri = createGetParametar($logoutEndpoint, \%paramHash);
|
57
|
+
|
58
|
+
# 削除Cookie
|
59
|
+
my $deleteSessionCookie0 = $_Q->cookie(
|
60
|
+
-name=>'AWSELBAuthSessionCookie-0',
|
61
|
+
-value=>'',
|
62
|
+
-expires=>'-1d'
|
63
|
+
);
|
64
|
+
my $deleteSessionCookie1 = $_Q->cookie(
|
65
|
+
-name=>'AWSELBAuthSessionCookie-1',
|
66
|
+
-value=>'',
|
67
|
+
-expires=>'-1d'
|
68
|
+
);
|
69
|
+
|
70
|
+
# 応答出力
|
71
|
+
print $_Q->header(-cookie=>[$deleteSessionCookie0,$deleteSessionCookie1], -location=>$uri);
|
72
|
+
|
73
|
+
# GETパラメータ付与関数
|
74
|
+
sub createGetParametar{
|
75
|
+
my $url = @_[0];
|
76
|
+
my %paramHash = %{@_[1]};
|
77
|
+
my @paramArr = ();
|
78
|
+
while(my($key, $value) = each(%paramHash)){
|
79
|
+
my $elem = "$key=$value";
|
80
|
+
push(@paramArr, $elem);
|
81
|
+
}
|
82
|
+
return $url . '?' . join('&', @paramArr);
|
83
|
+
}
|
84
|
+
```
|
85
|
+
|
13
86
|
### 試したこと
|
14
87
|
|
15
88
|
ログアウトcgiを実行して、https通信でセッションcookieを削除してログインエンドポイントにリダイレクトした際に、このタイミングなのかは不明なのですがcognitoとXSRF-TOKENという名前のcookieが生成されていました。この2つは認可エンドポイントにリクエストした際に、cookieとしてセットされているようなのですが、セッションcookieを削除するまでブラウザの開発者ツールに表示されていませんでした。試しに、cognitoという名前のcookieを削除して再読み込みしたところ、ログイン画面が表示されました。
|
1
結びの句の追加。
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,4 +14,6 @@
|
|
14
14
|
|
15
15
|
ログアウトcgiを実行して、https通信でセッションcookieを削除してログインエンドポイントにリダイレクトした際に、このタイミングなのかは不明なのですがcognitoとXSRF-TOKENという名前のcookieが生成されていました。この2つは認可エンドポイントにリクエストした際に、cookieとしてセットされているようなのですが、セッションcookieを削除するまでブラウザの開発者ツールに表示されていませんでした。試しに、cognitoという名前のcookieを削除して再読み込みしたところ、ログイン画面が表示されました。
|
16
16
|
|
17
|
+
もし何か知りたい情報があれば、できる限りご提供させていただきます。
|
18
|
+
お力添えのほど、何卒よろしくお願いいたします。
|
17
19
|
|