После создания нового Авторизатора с привязкой к заголовку авторизации -
Я попытался протестировать его с некоторым токеном -
Но я не получаю никакого заголовка при попытке напечатать весь заголовок запроса -
Map<String, String> headers = request.getHeaders();
Map<String, List<String>> multiValueHeaders = request.getMultiValueHeaders();
if(headers != null) {
for (Map.Entry<String,String> entry : headers.entrySet()) {
context.getLogger().log("headers Key = " + entry.getKey() +
",headers Value = " + entry.getValue());
}
}
if(multiValueHeaders != null) {
for (Entry<String, List<String>> entry : multiValueHeaders.entrySet()) {
context.getLogger().log("multiValueHeaders Key = " + entry.getKey());
List<String> headersList =(List<String>) entry.getValue();
headersList.forEach((temp) -> {
context.getLogger().log("Header-multiValueHeaders" + temp);
});
}
}
Я ожидаю, что заголовок авторизации будет частью запроса, или я получаю некоторые что-то не так.
При проверке журналов CloudWatch заголовки всегда равны нулю.
Весь код -
public class Authorizer implements RequestHandler<APIGatewayProxyRequestEvent, AuthorizerResponse> {
private static FilterHandlers handler = new FilterHandlers();
public AuthorizerResponse handleRequest(APIGatewayProxyRequestEvent request, Context context) {
String authorization = "";
Map<String, String> headers = request.getHeaders();
Map<String, List<String>> multiValueHeaders = request.getMultiValueHeaders();
if(headers != null) {
for (Map.Entry<String,String> entry : headers.entrySet()) {
context.getLogger().log("headers Key = " + entry.getKey() +
",headers Value = " + entry.getValue());
}
}
if(multiValueHeaders != null) {
for (Entry<String, List<String>> entry : multiValueHeaders.entrySet()) {
context.getLogger().log("multiValueHeaders Key = " + entry.getKey());
List<String> headersList =(List<String>) entry.getValue();
headersList.forEach((temp) -> {
context.getLogger().log("Header-multiValueHeaders" + temp);
});
}
}
context.getLogger().log("authorization: " + authorization);
//send the Authorization header to othe http service
boolean doJwtAuthCheck = handler.doJwtAuthCheck(authorization);
Map<String, String> ctx = new HashMap<>();
//ctx.put("username", JwtUtils.extractUserName(jwt));
APIGatewayProxyRequestEvent.ProxyRequestContext proxyContext = request.getRequestContext();
APIGatewayProxyRequestEvent.RequestIdentity identity = proxyContext.getIdentity();
String arn = String.format("arn:aws:execute-api:eu-west-1:%s:%s/%s/%s/%s",
proxyContext.getAccountId(),
proxyContext.getApiId(),
proxyContext.getStage(),
proxyContext.getHttpMethod(),
"*");
context.getLogger().log("arn: " + arn);
Statement statement = null;
//if service returned 200
if(doJwtAuthCheck) {
statement = Statement.builder()
.resource(arn).effect("Allow")
.build();
//if service returned 401
}else {
statement = Statement.builder()
.resource(arn).effect("Deny")
.build();
}
context.getLogger().log("statment: " + statement.Effect);
PolicyDocument policyDocument = PolicyDocument.builder()
.statements(
Collections.singletonList(statement)
).build();
return AuthorizerResponse.builder()
.principalId(identity.getAccountId())
.policyDocument(policyDocument)
.context(ctx)
.build();
}
}