Als ich in Lambda nach Standardauthentifizierung gesucht habe, habe ich nur Node.js gefunden, also habe ich es geschrieben. Dient auch als eigenes Memorandum. Die Node.js-Version wird veröffentlicht, sobald Sie herumgehen, daher werde ich sie hier nicht berühren.
Es ist keine große Sache, aber es ist eine Wiederholung der Node.js-Version. Es ist jedoch insofern etwas anders, als es mehrere Konten unterstützen kann.
import json
import base64
accounts = [
{
"user": "user1",
"pass": "pass1"
},
{
"user": "user2",
"pass": "pass2"
}
]
def lambda_handler(event, context):
request = event.get("Records")[0].get("cf").get("request")
headers = request.get("headers")
authorization_header = headers.get("authorization")
if not check_authorization_header(authorization_header):
return {
'headers': {
'www-authenticate': [
{
'key': 'WWW-Authenticate',
'value':'Basic'
}
]
},
'status': 401,
'body': 'Unauthorized'
}
return request
def check_authorization_header(authorization_header: list) -> bool:
if not authorization_header:
return False
for account in accounts:
encoded_value = base64.b64encode("{}:{}".format(account.get("user"), account.get("pass")).encode('utf-8'))
check_value = "Basic {}".format(encoded_value.decode(encoding='utf-8'))
if authorization_header[0].get("value") == check_value:
return True
return False
Grundsätzlich war es einfach! Das Einfügen der BASIC-Authentifizierung in CloudFront + S3 sollte in Ordnung sein. Es gibt eine Beschreibung des "Authorization" -Headers, der auf anderen Websites hier fehlt.
Recommended Posts