Я пытаюсь настроить 2 приложения Google Cloud Endpoints, чтобы 1-е приложение могло отправить запрос 2-му, при этом запрос был защищен токеном JWT. Я использую это руководство:
https://cloud.google.com/endpoints/docs/openapi/service-account-authentication#configure_auth
Я успешно подключаю токен JWT в запросе ко 2-му приложению. Он появляется в разделе Authorization: bearer
HTTP-запроса, и я убедился, что токен действителен.
Если я сделаю запрос к своему методу API во 2-м приложении без какого-либо токена, метод успешно вызывается. Это не то, что я ожидал, так как документация в ссылке, которую я предоставил, гласит:
Перед тем как ESP направит запрос вашему API, ESP проверит:
Подпись JWT с использованием открытого ключа, который находится по адресу
URI, указанный в поле x-google-jwks_uri в вашем OpenAPI
документ.
...
Так что я ожидаю, что доступ к методу будет полностью запрещен, если нет действительного токена JWT.
Когда я делаю запрос, с токеном JWT или без него, мне не вводят User
в мой метод, и я не получаю ничего из следующего в запросе (как предлагается в нижней части Google руководство по документации):
{
"issuer": TOKEN_ISSUER,
"id": USER_ID,
"email" : USER_EMAIL
}
Я не уверен, что мне нужно сделать для защиты моего второго приложения с помощью токена JWT. Что может быть причиной этого? Что я могу попробовать / проверить, чтобы проверить мою конфигурацию безопасности?
Вот openapi.json для моего второго приложения:
{
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": "myApp2.appspot.com"
},
"host": "myApp2.appspot.com",
"basePath": "/api",
"schemes": [
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"securityDefinitions": {
"mySecurityDef": {
"type": "oauth2",
"authorizationUrl": "",
"flow": "implicit",
"x-google-issuer": "myApp2@myProject.iam.gserviceaccount.com",
"x-google-jwks_uri": "https://www.googleapis.com/robot/v1/metadata/x509/myApp2@myProject.iam.gserviceaccount.com",
"x-google-audience": "myApp2-api"
}
},
"paths": {
"/myApp2/v1/doStuff": {
"get": {
"operationId": "MyApp2DoStuff_1",
"responses": {
"200": {
"description": "A successful response"
}
},
"security" : [
{ "mySecurityDef": [ ] }
]
}
}
}
}
Определение метода API:
@ApiMethod(name = "doStuff", path="doStuff", httpMethod = "get")
public void DoStuff_1(HttpServletRequest req, User user) {
HttpServletRequest myRequest = req;
}
API-аннотация:
@Api(
name = "myApp2",
version = "v1",
namespace =
@ApiNamespace(
ownerDomain = "myApp2.appspot.com",
ownerName = "myApp2.appspot.com",
packagePath = ""
),
issuers = {
@ApiIssuer(
name = "myIssuerName",
issuer = "myApp2@myProject.iam.gserviceaccount.com",
jwksUri =
"https://www.googleapis.com/service_accounts/v1/metadata/x509/myApp2@myProject.iam.gserviceaccount.com"
)
},
issuerAudiences = {@ApiIssuerAudience(name = "myIssuerName", audiences = "myApp2-api")}
)