
āļāļāļāļģ
āļŦāļēāļāļāļļāļāļāļģāļĨāļąāļāļŠāļĢāđāļēāļāļĢāļ°āļāļ Backend āļāļĩāđāđāļŦāđāļāļđāđāđāļāđāļĨāđāļāļāļāļīāļāđāļāđāļēāļĄāļēāđāļāđāļāļēāļ āļāļēāļĢāļāļāļāđāļāļāļĢāļ°āļāļ Authentication āđāļĨāļ° Authorization āļāļĒāđāļēāļāļāļĨāļāļāļ āļąāļĒāļāļ·āļāđāļāđāļāļŦāļąāļ§āđāļāļŦāļĨāļąāļ AWS āļĄāļĩāļāļĢāļīāļāļēāļĢāļāļĩāđāļāđāļ§āļĒāļāļļāļāļāļąāļāļāļēāļĢāđāļĢāļ·āđāļāļāļāļĩāđāđāļāđāļāđāļēāļĒāļāļķāđāļ āļāļ·āļ Amazon Cognito āđāļĄāļ·āđāļāļāļŠāļēāļāđāļāđāļēāļāļąāļ API Gateway āđāļĨāļ° Lambda āļāļļāļāļāđāļāļ°āđāļāđāļĢāļ°āļāļāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāđāļāļ Serverless āļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļāļĒāļēāļĒāļĢāļ°āļāļāđāļāđāđāļĄāđāļāļģāļāļąāļ
1. āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāļĢāļ°āļāļ Authentication āļāđāļ§āļĒ Cognito
āļĢāļ°āļāļāļāļĩāđāļāļĢāļ°āļāļāļāļāđāļ§āļĒ 3 āļŠāđāļ§āļāļŦāļĨāļąāļ:
- Amazon Cognito User Pool â āđāļāđāļāļąāļāļāļēāļĢāļāļđāđāđāļāđāđāļĨāļ°āļĢāļŦāļąāļŠāļāđāļēāļ
- API Gateway â āđāļāđāļāļāļļāļāļĢāļąāļ API āđāļĨāļ°āđāļāļ·āđāļāļĄāļāļąāļ Authorizer
- Lambda Function â āđāļāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨ Logic āļŦāļĨāļąāļāļāđāļēāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāđāļĨāđāļ§

2. āļāļēāļĢāļŠāļĢāđāļēāļ Cognito User Pool
āļāļąāđāļāļāļāļāđāļĢāļāļāļ·āļāļāļēāļĢāļŠāļĢāđāļēāļ User Pool āļŠāļģāļŦāļĢāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāļāļđāđāđāļāđ:
aws cognito-idp create-user-pool --pool-name MyUserPool
āļāļēāļāļāļąāđāļ āļŠāļĢāđāļēāļ App Client āđāļāļ·āđāļāđāļŦāđ Frontend āđāļāđāļāļēāļāđāļāđ:
aws cognito-idp create-user-pool-client \
--user-pool-id \
--client-name MyWebClient \
--generate-secret
3. āļāļēāļĢāļŠāļĄāļąāļāļĢāđāļĨāļ°āļĨāđāļāļāļāļīāļāļāļđāđāđāļāđ (SignUp / SignIn)
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāļŠāļĄāļąāļāļĢāļāļđāđāđāļāđāđāļŦāļĄāđ:
aws cognito-idp sign-up \ --client-id \ --username [email protected] \ --password "MyStrongPassword123!"
āļŦāļĨāļąāļāļāļēāļāļāļđāđāđāļāđāļĒāļ·āļāļĒāļąāļāļāļĩāđāļĄāļĨāđāļĢāļĩāļĒāļāļĢāđāļāļĒ āļāđāļŠāļēāļĄāļēāļĢāļāļĨāđāļāļāļāļīāļāđāļāļ·āđāļāļĢāļąāļ Token:
aws cognito-idp initiate-auth \ --auth-flow USER_PASSWORD_AUTH \ --client-id \ --auth-parameters [email protected],PASSWORD=MyStrongPassword123!
āļĢāļ°āļāļāļāļ°āļāļ·āļāļāđāļē Token 3 āļŠāđāļ§āļāļāļ·āļ ID Token, Access Token, Refresh Token
4. āļāļēāļĢāļāļŠāļēāļ Cognito āļāļąāļ API Gateway
āļŠāļĢāđāļēāļ Cognito Authorizer āđāļ API Gateway āđāļāļ·āđāļāđāļāđāļāļĢāļ§āļāļŠāļāļ Token:
āđāļĄāļ·āđāļāđāļāļ·āđāļāļĄāļāđāļāđāļĨāđāļ§ āļāļļāļ Request āļāļĩāđāđāļāđāļēāļĄāļēāļāđāļāļāđāļāļ Token āļĄāļēāļāđāļ§āļĒ āđāļāđāļ:
curl -X GET https://api.example.com/dev/profile \
-H "Authorization: "
5. āđāļāļĩāļĒāļ Lambda āļŠāļģāļŦāļĢāļąāļ API āļāļĩāđāļāđāļāļāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ
āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ Lambda āļāđāļ§āļĒ Node.js āļāļĩāđāļāđāļēāļāļāđāļāļĄāļđāļĨāļāļđāđāđāļāđāļāļēāļ Token:
// handler.js
exports.handler = async (event) => {
const claims = event.requestContext.authorizer.claims;
const username = claims["cognito:username"];
return {
statusCode: 200,
body: JSON.stringify({
message: `āļŠāļ§āļąāļŠāļāļĩ ${username}, āļāļļāļāđāļāđāļēāļŠāļđāđāļĢāļ°āļāļāļŠāļģāđāļĢāđāļāđāļĨāđāļ§!`
})
};
};
6. āļāļēāļĢāļāļĢāļ§āļāļŠāļāļ Token āļāđāļ§āļĒ JWT
āļāļļāļ Token āļāļāļ Cognito āđāļāđāļ JWT (JSON Web Token) āļāļķāđāļāļŠāļēāļĄāļēāļĢāļāļāļĢāļ§āļāļŠāļāļāđāļāđāļāļēāļ public key āļāļāļ Cognito:
import jwt
import requests
POOL_ID = "ap-southeast-1_XXXXXXX"
REGION = "ap-southeast-1"
url = f"https://cognito-idp.{REGION}.amazonaws.com/{POOL_ID}/.well-known/jwks.json"
def verify_token(token):
jwks = requests.get(url).json()
header = jwt.get_unverified_header(token)
key = next(k for k in jwks['keys'] if k['kid'] == header['kid'])
return jwt.decode(token, key, algorithms=['RS256'], audience='your_client_id')
āļāļąāļāļāđāļāļąāļāļāļĩāđāļāđāļ§āļĒāđāļŦāđāļāļļāļāļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļ Token āļāđāļāļāļāļāļļāļāļēāļāđāļŦāđāđāļāđāļēāļāļķāļ API
7. āđāļāļīāđāļĄ Authorization āļĢāļ°āļāļąāļ Role
āđāļ Cognito āļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļ Role āļāļāļāļāļđāđāđāļāđāđāļāđāļāđāļēāļāļāļĨāļļāđāļĄ (Groups) āđāļāđāļ:
aws cognito-idp create-group \
--user-pool-id \
--group-name admin \
--description "Administrator group"
āđāļĨāđāļ§āđāļāļīāđāļĄāļāļđāđāđāļāđāđāļāđāļēāđāļ:
aws cognito-idp admin-add-user-to-group \ --user-pool-id \ --username [email protected] \ --group-name admin
8. āļāļēāļĢāļāļģāļāļēāļāđāļāļ Secure End-to-End
āđāļĄāļ·āđāļāļāļđāđāđāļāđāļĨāđāļāļāļāļīāļāļŠāļģāđāļĢāđāļ â āđāļāđ Token â āļŠāđāļ API āļāđāļēāļ API Gateway â Authorizer āļāļĢāļ§āļāļŠāļāļ Token â Lambda āļāļĢāļ°āļĄāļ§āļĨāļāļĨ â āļŠāđāļāļāļĨāļąāļāļāļĨāļĨāļąāļāļāđ āļāļąāđāļāļŦāļĄāļāļāļĩāđāđāļāļīāļāļāļķāđāļāđāļāļĒāđāļĄāđāļāđāļāļāļĄāļĩāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļĢāļąāļāļāļĨāļāļāđāļ§āļĨāļē
9. āļŠāļĢāļļāļ
āļāļēāļĢāđāļāđ Cognito + API Gateway + Lambda āļāļģāđāļŦāđāđāļĢāļēāļŠāļĢāđāļēāļāļĢāļ°āļāļ Authentication/Authorization āđāļāđāļāđāļēāļĒ āļāļĨāļāļāļ āļąāļĒ āđāļĨāļ°āļāļĒāļēāļĒāļĢāļ°āļāļāđāļāđāđāļāļĒāđāļĄāđāļāđāļāļāļāļđāđāļĨ Infrastructure āđāļāļ Developer āļŠāļēāļĄāļēāļĢāļāđāļāđāđāļāļ§āļāļēāļāļāļĩāđāļāļąāļ React, Angular, āļŦāļĢāļ·āļ Mobile App āđāļāđāļāļąāļāļāļĩ
- â āļĨāļāļāļ§āļēāļĄāļāļąāļāļāđāļāļāļāļāļāļāļēāļĢāļāļąāļāļāļēāļĢāļāļđāđāđāļāđ
- â āļāļĨāļāļāļ āļąāļĒāļāļēāļĄāļĄāļēāļāļĢāļāļēāļ AWS
- â āđāļāļ·āđāļāļĄāļāđāļāļāļąāļāļāļĢāļīāļāļēāļĢāļāļ·āđāļāļāļāļ AWS āđāļāđāļāđāļēāļĒ
ð§ āđāļāļĩāļĒāļāđāļāļĒ King Pool
āļ āļēāļāļāļĢāļ°āļāļāļ: Cognito, Lambda, API Gateway, JWT Token
āļāđāļēāļāļāđāļ: āļāļēāļĢāļāļģ Observability āļāđāļ§āļĒ CloudWatch, X-Ray āđāļĨāļ° Tracing