質問するログイン新規登録

回答編集履歴

1

コードを記載

2020/03/30 01:02

投稿

kazuki-com
kazuki-com

スコア4

answer CHANGED
@@ -1,1 +1,66 @@
1
- 502(Bad Gateway)の原因は「"statusCode": "200"」でした。「"statusCode": 200」と書かなければならなかったようです。
1
+ 502(Bad Gateway)の原因は「"statusCode": "200"」でした。「"statusCode": 200」と書かなければならなかったようです。
2
+
3
+ 最終的には以下の実装でうまくいきました。
4
+ ```python
5
+ def lambda_handler(event, context):
6
+ """
7
+ ラムダハンドラ
8
+
9
+ Args:
10
+ event (dict): イベント
11
+ context (object): コンテキスト
12
+ """
13
+
14
+ del context
15
+
16
+ try:
17
+ # 開始ログ
18
+ logging.info("'basic_authentication' Lambda start", extra={"event": event})
19
+
20
+ # BASIC認証ユーザIDとパスワード
21
+ ssm = SSM()
22
+ user_id = ssm.get_parameter_store_value(lambda_env.get("BASIC_AUTH_ID_PATH"))
23
+ password = ssm.get_parameter_store_value(lambda_env.get("BASIC_AUTH_PASSWORD_PATH"))
24
+
25
+ # 認証成功時払い出しCookie情報
26
+ cookie_name = ssm.get_parameter_store_value(lambda_env.get("COOKIE_NAME_PATH"))
27
+ cookie_value = ssm.get_parameter_store_value(lambda_env.get("COOKIE_VALUE_PATH"))
28
+
29
+ # 認証成功時のリダイレクト先URL
30
+ redirect_url = lambda_env.get("REDIRECT_URL")
31
+ # 認証文字列
32
+ auth_str = base64.b64encode(f"{user_id}:{password}".encode("utf-8")).decode("ascii")
33
+
34
+ headers = event["headers"]
35
+ if ("authorization" not in headers) or (headers["authorization"].split()[1] != auth_str):
36
+ # Basic認証要求
37
+ return {
38
+ "statusCode": 401,
39
+ "statusDescription": "401 Unauthorized",
40
+ "body": "Unauthorized",
41
+ "isBase64Encoded": False,
42
+ "headers": {
43
+ "WWW-Authenticate": "Basic",
44
+ "Content-Type": "text/html"
45
+ }
46
+ }
47
+
48
+ # Basic認証成功
49
+ return {
50
+ "statusCode": 302,
51
+ "statusDescription": "302 Found",
52
+ "isBase64Encoded": False,
53
+ "headers": {
54
+ "Set-cookie": f"{cookie_name}={cookie_value}",
55
+ "location": redirect_url
56
+ }
57
+ }
58
+ except Exception as e:
59
+ # 例外発生
60
+ logging.exception("An error occurred with 'basic_authentication' Lambda")
61
+ raise e
62
+
63
+ finally:
64
+ # 終了ログ
65
+ logging.info("'basic_authentication' Lambda end", extra={"event": event})
66
+ ```