Как проверить ключ API в облачных конечных точках Google v2

Я новичок в работе с облачными конечными точками Google, особенно с версией 2, и считаю ее важным слоем для создания сервисных приложений. Из документации, которую я наблюдал, они предоставили варианты использования фреймворка конечных точек, а затем открыли API. Теперь, когда я использую фреймворки с требуемым ключом API, а затем генерирую openapi.json. Кажется, я не получаю никакой ошибки, когда делаю запрос без ключ API. Интересно, почему это так, когда я пометил свой класс как требуемый ключ API. Должен ли я сам предоставить логику проверки? Это конфигурация для проверки всех методов в API.

@Api(name = "testapi",
    version = "v1",
    apiKeyRequired = AnnotationBoolean.TRUE,
    scopes = {Constants.EMAIL_SCOPE},
    clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID},
    audiences = {Constants.ANDROID_AUDIENCE}

)

А затем для создания файла openapi.json это конфигурация pom. Хотя я все еще пытаюсь понять, как настроить его таким образом, мне не нужно будет вводить свои классы обслуживания.

 <profiles>
    <profile>
        <id>GetSwaggerDoc</id>
        <activation>
            <property>
                <name>GetSwaggerDoc</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.4.0</version>
                    <configuration>
                        <includePluginDependencies>true</includePluginDependencies>
                        <mainClass>com.google.api.server.spi.tools.EndpointsTool</mainClass>
                        <arguments>
                            <argument>get-swagger-doc</argument>
                            <argument>--hostname=test-api.endpoints.${endpoints.project.id}.cloud.goog</argument>
                            <argument>--war=target/test-1.0-SNAPSHOT</argument>
                            <argument>com.rareatom.test.services.TestApi</argument>
                        </arguments>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.google.endpoints</groupId>
                            <artifactId>endpoints-framework-tools</artifactId>
                            <version>${endpoints.framework.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.google.appengine</groupId>
                            <artifactId>appengine-api-1.0-sdk</artifactId>
                            <version>1.9.30</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>`

когда я запускаю mvn exec:java -DGetSwaggerDoc Это генерируется

{
 "swagger": "2.0",
 "info": {
  "version": "1.0.0",
  "title": "test-api.endpoints.test-test-160113.cloud.goog"
 },
 "host": "test-api.endpoints.test-test-160113.cloud.goog",
 "basePath": "/_ah/api",
 "schemes": [
  "https"
 ],
 "consumes": [
  "application/json"
 ],
 "produces": [
  "application/json"
 ],
 "paths": {
  "/testapi/v1/test": {
   "post": {
    "operationId": "TestapiTest",
    "parameters": [ ],
    "responses": {
     "200": {
      "description": "A successful response",
      "schema": {
       "$ref": "#/definitions/Response"
      }
     }
    },
    "security": [
     {
      "google_id_token": [ ]
     },
     {
      "google_id_token_https": [ ]
     },
     {
      "api_key": [ ]
     }
    ],
    "x-security": [
     {
      "google_id_token": {
       "audiences": [
        "AIzaSyAsnv2yeF6003txjfBVrZrlUe8jvfUJAtE"
       ]
      }
     },
     {
      "google_id_token_https": {
       "audiences": [
        "AIzaSyAsnv2yeF6003txjfBVrZrlUe8jvfUJAtE"
       ]
      }
     }
    ]
   }
  }
 },
 "securityDefinitions": {
  "google_id_token_https": {
   "type": "oauth2",
   "authorizationUrl": "",
   "flow": "implicit",
   "x-google-issuer": "https://accounts.google.com",
   "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs"
  },
  "api_key": {
   "type": "apiKey",
   "name": "key",
   "in": "query"
  },
  "google_id_token": {
   "type": "oauth2",
   "authorizationUrl": "",
   "flow": "implicit",
   "x-google-issuer": "accounts.google.com",
   "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs"
  }
 },
 "definitions": {
  "Status": {
   "enum": [
    "SUCCESS",
    "FAILURE"
   ]
  },
  "Response": {
   "properties": {
    "code": {
     "type": "integer",
     "format": "int32"
    },
    "data": {
     "$ref": "#/definitions/_any"
    },
    "message": {
     "type": "string"
    },
    "status": {
     "$ref": "#/definitions/Status"
    }
   }
  },
  "_any": { }
 }
}

Затем эта конфигурация развертывается с помощью gcloud service-management deploy.


person I.Tyger    schedule 10.04.2017    source источник
comment
не могли бы вы опубликовать свою конфигурацию. как вы сделали свой API обязательным для использования ключа API?   -  person Michael Meyer    schedule 10.04.2017
comment
@MichaelMeyer Все вопросы обновлены.   -  person I.Tyger    schedule 10.04.2017
comment
Как вы делаете запрос?   -  person Nick    schedule 05.05.2017
comment
Повторюсь, как — с точки зрения кода — вы формируете и отправляете запрос? Я спрашиваю это, чтобы попытаться воспроизвести то, что вы видели.   -  person Nick    schedule 09.05.2017


Ответы (1)


Я заметил, что ключ API проверяется, когда у вас есть более одного аргумента или более одного аннотированного класса @Api в вашем pom.xml и вашем web.xml

пом.xml

<arguments>
  <argument>get-swagger-doc</argument>
  <argument>--hostname=tita-api.endpoints.${endpoints.project.id}.cloud.goog</argument>
   <argument>--war=target/tita-1.0-SNAPSHOT</argument>           
   <argument>com.rareatom.tita.services.TestApi</argument>                               
   <argument>com.rareatom.tita.services.SessionServices</argument>                     
                        </arguments>

И для вашего web.xml

<servlet>
    <servlet-name>EndpointsServlet</servlet-name>
    <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
    <init-param>
        <param-name>services</param-name>
        <param-value>com.rareatom.tita.services.TestApi,
        com.rareatom.tita.services.SessionServices</param-value>
</init-param>
</servlet>
person I.Tyger    schedule 09.05.2017
comment
Не могли бы вы показать пример того, как вы делаете запрос и как выглядит метод, обрабатывающий запрос? Вы должны анонимизировать все, чем не хотите делиться. Это было бы очень полезно для воспроизведения поведения, которого я до сих пор не наблюдал. - person Nick; 10.05.2017