Google Cloud - аутентификация токена JWT не применяется для приложения «Конечные точки» - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь настроить 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")}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...