Enterprise authentication with AWS Cognito and Application Load Balancer integration
x-amzn-oidc-accesstoken
x-amzn-oidc-identity
x-amzn-oidc-data
oxy serve --auth-mode cognito
# Create user pool USER_POOL_ID=$(aws cognito-idp create-user-pool \ --pool-name oxy-users \ --auto-verified-attributes email \ --username-attributes email \ --query 'UserPool.Id' --output text) # Create client CLIENT_ID=$(aws cognito-idp create-user-pool-client \ --user-pool-id $USER_POOL_ID \ --client-name oxy-alb-client \ --generate-secret \ --callback-urls "https://your-domain.com/oauth2/idpresponse" \ --allowed-o-auth-flows code \ --allowed-o-auth-scopes openid email profile \ --query 'UserPoolClient.ClientId' --output text) # Create domain aws cognito-idp create-user-pool-domain \ --domain oxy-auth-$(date +%s) \ --user-pool-id $USER_POOL_ID
# Create ALB (assumes VPC/subnets exist) ALB_ARN=$(aws elbv2 create-load-balancer \ --name oxy-cognito-alb \ --subnets subnet-xxx subnet-yyy \ --security-groups sg-xxx \ --scheme internet-facing \ --query 'LoadBalancers[0].LoadBalancerArn' --output text) # Create target group TG_ARN=$(aws elbv2 create-target-group \ --name oxy-cognito-tg \ --protocol HTTP \ --port 3000 \ --vpc-id vpc-xxx \ --health-check-path /health \ --query 'TargetGroups[0].TargetGroupArn' --output text)
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) # Create HTTPS listener with Cognito auth aws elbv2 create-listener \ --load-balancer-arn $ALB_ARN \ --protocol HTTPS \ --port 443 \ --certificates CertificateArn=arn:aws:acm:region:account:certificate/cert-id \ --default-actions Type=authenticate-cognito,AuthenticateCognitoConfig='{ "UserPoolArn":"arn:aws:cognito-idp:region:'$ACCOUNT_ID':userpool/'$USER_POOL_ID'", "UserPoolClientId":"'$CLIENT_ID'", "UserPoolDomain":"your-cognito-domain" }',Type=forward,TargetGroupArn=$TG_ARN
# Start with Cognito mode oxy serve --auth-mode cognito --port 3000 # Register instance with target group aws elbv2 register-targets \ --target-group-arn $TG_ARN \ --targets Id=i-instanceid,Port=3000
# Add Google as identity provider aws cognito-idp create-identity-provider \ --user-pool-id $USER_POOL_ID \ --provider-name Google \ --provider-type Google \ --provider-details '{ "client_id":"your-google-client-id", "client_secret":"your-google-client-secret", "authorize_scopes":"email openid profile" }' # Update client to support Google aws cognito-idp update-user-pool-client \ --user-pool-id $USER_POOL_ID \ --client-id $CLIENT_ID \ --supported-identity-providers COGNITO,Google