Chalice Built-in Authorizers: Try Sample
"Chalice supports multiple mechanisms for authorization ... A Built-in authorizer is used when you’d like to write your custom authorizer in Chalice" (https://aws.github.io/chalice/topics/authorizers.html).
In this post, I am going to run the sample in the above page.
create project
% chalice new-project chalice_auth
% cd chalice_auth
app.py
from chalice import Chalice, AuthResponse
app = Chalice(app_name='chalice_auth')
@app.authorizer()
def demo_auth(auth_request):
token = auth_request.token
if token == 'allow':
return AuthResponse(routes=['/'], principal_id='user')
else:
return AuthResponse(routes=[], principal_id='user')
@app.route('/', authorizer=demo_auth)
def index():
return {'context': app.current_request.context}
@app.route('/hello')
def index():
return {'hello': 'world'}
The endpoint /hello is added for comparison.
run
% curl http://127.0.0.1:8000
{"message":"Unauthorized"}
You get 401 for no auth header.
% curl http://127.0.0.1:8000 -H 'Authorization: abc'
{"Message": "User is not authorized to access this resource"}
403 for mismatch.
% curl http://127.0.0.1:8000 -H 'Authorization: allow'
{"context":{"httpMethod":"GET","resourcePath":"/","identity":{"sourceIp":"127.0.0.1"},"path":"/","authorizer":{"principalId":"user"}}}
200 for the correct value.
% curl http://127.0.0.1:8000/hello
{"hello":"world"}
200. No auth header is needed for /hello as it does not have the authorizer.
next
You may try AWS Cognito implementation, or implement the user table yourself using DynamoDB (see boto3 and PynamoDB).
Comments
Post a Comment