Lorsque j'ai recherché l'authentification de base dans Lambda, je n'ai trouvé que Node.js, alors je l'ai écrit. Sert également de mon propre mémorandum. La version Node.js sortira dès que vous en serez, donc je n'y toucherai pas ici.
Ce n'est pas un gros problème, mais c'est une refonte de la version Node.js. Cependant, c'est un peu différent en ce sens qu'il peut prendre en charge plusieurs comptes.
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
En gros, C'était facile! Comment mettre l'authentification BASIC dans CloudFront + S3 devrait convenir. Il y a une description de l'en-tête ʻAuthorization` qui manque sur d'autres sites ici.
Recommended Posts