Ограничение моих конечных точек с помощью ключа API в java

Я использую облачные конечные точки v2 для java. Моя проблема в том, что любой может получить доступ к этому методу конечных точек через API Explorer или напрямую через URL, который кто-то знает. Я хочу защитить свои конечные точки. Я читал документацию о том, как ограничить весь API или некоторые методы с помощью КЛЮЧА API. Ограничение доступа к API с помощью ключей API

Вот что я пытаюсь.

@Api(
        name = "zeem",
        version = "v1"
)

public class Account {
@ApiMethod(name = "getRegistration", path = "getRegistration", apiKeyRequired = AnnotationBoolean.TRUE)
public Registered getRegistration(@Named("phone") Long phone){
  // code ....
}

Я могу запустить этот метод без какого-либо ключа API, и он работает успешно.
Даже я пытаюсь получить доступ к этому методу напрямую с URL-адреса, он также работает.

http://localhost:8080/_ah/api/zeem/v1/getRegistration?phone=123 // Successfully getting response

Не могли бы вы сообщить мне, что я делаю не так? Что я скучаю?

Обновление - OpenAPI Doc

Да, я добавляю управление API Вот как openapi.json выглядит эта функция.

    "/zeem/v1/getRegistration": {
   "get": {
    "operationId": "ZeemGetRegistration",
    "parameters": [
     {
      "name": "phone",
      "in": "query",
      "required": true,
      "type": "integer",
      "format": "int64"
     }
    ],
    "responses": {
     "200": {
      "description": "A successful response",
      "schema": {
       "$ref": "#/definitions/Registered"
      }
     }
    },
    "security": [
     {
      "api_key": [ ]
     }
    ]
   }
  },

Вот как выглядит консоль.

введите здесь описание изображения

Что мне не хватает?

Обновление: Web.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- [START_EXCLUDE] -->
<!--
  Copyright 2016 Google Inc.
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
        http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- [END_EXCLUDE] -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <welcome-file-list>
    <welcome-file>welcome</welcome-file>
  </welcome-file-list>

  <!-- OBJECTIFY -->
  <filter>
    <filter-name>ObjectifyFilter</filter-name>
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
  </filter>
    <filter-mapping>
        <filter-name>ObjectifyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  <!-- ENDPOINTS -->
  <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>
                org.octabyte.zeem.API.Account,
                org.octabyte.zeem.API.CommentApi,
                org.octabyte.zeem.API.FriendApi,
                org.octabyte.zeem.API.ListApi,
                org.octabyte.zeem.API.PostApi,
                org.octabyte.zeem.API.SearchApi,
                org.octabyte.zeem.API.UserApi,
                org.octabyte.zeem.API.StoryApi
            </param-value>
        </init-param>
    </servlet>
    <!-- Route API method requests to the backend. -->
    <servlet-mapping>
        <servlet-name>EndpointsServlet</servlet-name>
        <url-pattern>/_ah/api/*</url-pattern>
    </servlet-mapping>


    <!-- Security -->
    <security-role>
        <role-name>admin</role-name>
    </security-role>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>admin</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

</web-app>

person World Programing    schedule 24.08.2018    source источник
comment
Вы сначала добавили управление API?   -  person saiyr    schedule 24.08.2018
comment
Да, я добавляю, пожалуйста, проверьте обновления   -  person World Programing    schedule 26.08.2018
comment
Пожалуйста, опубликуйте также свой web.xml.   -  person saiyr    schedule 27.08.2018
comment
Да, добавляю, пожалуйста, проверьте обновление   -  person World Programing    schedule 28.08.2018


Ответы (1)


Есть недопонимание, что такое ограничение доступа к ключу API. Ограничение ключа API предназначен для ограничения того, к каким API-интерфейсам имеет доступ ключ, он ни в какой форме не имеет отношения к аутентификации пользователей.

Существует несколько способов аутентификации пользователей для конечных точек, например, вы можете использовать Управление API, или вы можете изучить использование OpenAPI < / а>.

person Ying Li    schedule 25.08.2018
comment
Да, я добавляю API Management и OpenAPI Doc. Пожалуйста, проверьте обновление. Но все же я могу получить доступ к методу конечной точки без какого-либо ключа api - person World Programing; 26.08.2018
comment
Я немного запутался в том, что вы хотите, поэтому предлагаю вам оба варианта. Если вас беспокоит, что неаутентифицированные пользователи могут получить доступ к вашим конечным точкам, вам потребуется это; если вы обеспокоены тем, что ваша конечная точка может случайно попасть в Интернет (защитить конечную точку от случайного и непреднамеренного трафика), вам потребуется заблокировать любой доступ без ключа API. - person Ying Li; 28.08.2018
comment
Хочу второй вариант. Но, как вы можете видеть в моем вопросе, я пытаюсь это сделать, но это не работает. Я хочу знать, почему это не работает. Что мне не хватает? - person World Programing; 28.08.2018
comment
Хорошо, теперь я понимаю, что ты имеешь в виду. Итак, у вас есть один метод API, ограниченный ключом API проекта (некоторый случайный интернет-трафик не может получить к нему доступ). Вы пробовали развернуть его, чтобы протестировать его в производственной среде (возможно, в тестовой версии)? Кроме того, вы можете нажать URL-адрес, но возвращает ли он значимые данные (например, позволяет ли вам запустить код)? Если это так, то, похоже, вы можете сообщить о проблеме в нашу систему отслеживания проблем, чтобы мы можем исследовать это с нашей стороны, спасибо. - person Ying Li; 28.08.2018
comment
Да, я пробовал это при реальном развертывании. Та же проблема. Я разместил здесь проблему, issueetracker.google.com/issues/113347216 - person World Programing; 29.08.2018
comment
Я возьму на себя эту проблему и позабочусь о том, чтобы она была решена. - person Ying Li; 30.08.2018
comment
Не могли бы вы взглянуть на мою проблему - person World Programing; 07.09.2018