-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Description
Description:
I apologize, I don't know where the boundary between SAM issues and API Gateway v2 issues is, so some of this may be on their side of the line.
- "openIdConnect" Type Authorizer Is Not Created
Given:
OpenIdAuthorizer:
IdentitySource: $request.header.Authorization
JwtConfiguration:
audience:
- #audience#
OpenIdConnectUrl: https://#provider#/.well-known/openid-configuration
...no authorizer is created. It validates, and the transform looks reasonable:
"securitySchemes": {
"OpenIdAuthorizer": {
"type": "openIdConnect",
"x-amazon-apigateway-authorizer": {
"jwtConfiguration": {
"audience": [
"#audience#"
]
},
"identitySource": "$request.header.Authorization",
"type": "jwt",
"openIdConnectUrl": "https://#provider#/.well-known/openid-configuration"
}
}
}
...but I couldn't say whether it's right or wrong.
- Protected Route Fails to Accept Bearer Token
Given an "Authorization" header like Authorization: Bearer T0k3n
, a protected route responds with a "WWW-Authenticate" header like:
WWW-Authenticate: Bearer scope="" error="invalid_token" error_description="tokenstring should not contain 'bearer '"
This is incorrect. It should contain such a prefix. (I think I know which library produced this error message, and the header value should be split into scheme and parameter before attempting decoding.)
- Authentication Failures Cannot be Customized
Given no "Authorization" header, a protected route responds with a "WWW-Authenticate" header like: WWW-Authenticate: Bearer
. Which is a great step up from API Gateway v1! But there appears to be no way to customize what comes after "Bearer " for such a response. Something as full-blown as Gateway Responses may not fit the API Gateway v2 spirit, I get. But maybe a "Challenge" property? I'm no expert; something-something VTL?
A template for recreation.
--- AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: A sample for recreation. Globals: HttpApi: Auth: Authorizers: OpenIdAuthorizer: IdentitySource: $request.header.Authorization JwtConfiguration: audience: - #audience# OpenIdConnectUrl: https://#provider#/.well-known/openid-configuration Function: Handler: index.handler Runtime: nodejs10.x Resources: Closed: Type: AWS::Serverless::Function Properties: InlineCode: |- exports.handler = async () => ({ statusCode: 200, body: JSON.stringify('You are authenticated!') }); Events: Get: Type: HttpApi Properties: Method: GET Path: /closed Auth: Authorizer: OpenIdAuthorizer Open: Type: AWS::Serverless::Function Properties: InlineCode: |- exports.handler = async () => ({ statusCode: 200, body: JSON.stringify("It's wide open!") }); Events: Get: Type: HttpApi Properties: Method: GET Path: /open