質問編集履歴

3

試したことを追加。

2022/12/27 09:24

投稿

Johner-doest
Johner-doest

スコア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

ソースコードを追加しました。

2022/12/27 08:20

投稿

Johner-doest
Johner-doest

スコア3

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

結びの句の追加。

2022/12/27 07:55

投稿

Johner-doest
Johner-doest

スコア3

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