0

Я создал пользовательский API конечных точек с Google App Engine, который взаимодействует с веб-клиентом, и я успешно протестировал его с помощью API-обозревателя и веб-клиента.Облачные конечные точки не требуют аутентификации

Теперь я пытаюсь добавить аутентификацию в API конечных точек облака через эти instructions, используя web client ID. Я могу получить аутентификацию для работы, но не могу получить аутентификацию .

WEB_CLIENT_ID = # Some Client ID 

@endpoints.api(name="AppApi", version="v1", allowed_client_ids=[WEB_CLIENT_ID], audiences=[WEB_CLIENT_ID], scopes=[endpoints.EMAIL_SCOPE]) 
class AppApi(remote.Service): 

    @endpoints.method(TestRequestMessage, TestResponseMessage, name="test.get", path="test/get") 
    def TestGet(self, request): 
     response = TestResponseMessage() 
     # Return a blank response message 
     return response 

Я намеренно пытается исключить endpoints.API_EXPLORER_CLIENT_ID в allowed_client_ids, потому что я хочу, чтобы убедиться, что она не будет выполнена для запросов, которые не прошедших проверку подлинности с помощью API Explorer.

Когда я перехожу к исследователю API, я могу сделать успешные запросы без проверки подлинности. Когда я включаю проверку подлинности с помощью API-обозревателя, он просит включить аутентификацию по электронной почте, чтобы она работала, но она не требует аутентификации для вызовов.

Как вы получаете API конечных точек Google для проверки подлинности для каждого вызова?

Я также не выполняю какую-либо специфическую для пользователя работу с API, поэтому я просто пытаюсь использовать аутентификацию веб-клиента с использованием учетных данных веб-клиента, так что это веб-клиент, запрашивающий информацию. Пользователей не существует.

ответ

1

Там две Auth слои думать о том, когда дело с концами:

  • Клиент ID слой, который управляет какой код, откуда, с какой Client ID/секреты могут вызвать API. Вы можете прочитать об этом here.

  • Пользовательский уровень auth, который управляет процессом OAuth2.0 для входа/выхода OpenID (тот же самый), в котором пользователь предоставляет приложение для приложения https://www.googleapis.com/auth/userinfo.email, и приложение отправляет маркер-носитель вместе с каждым запросом API, так что сервер конечной точки может использовать этот токен для извлечения информации профиля пользователя, от имени которого был сделан запрос.Вы можете прочитать больше о Идентом слое пользователя конечных точек в документации (java/python)

проблема, если я понимаю, ваше сообщение, связанно с тем, что вы можете сделать запросы API Explorer, даже если API Идентификатор клиента Explorer не входит в список разрешенных идентификаторов. Это известный вопрос, который, как мне кажется, упоминается в public issue tracker и, таким образом, он работает, возможно, с высоким приоритетом.

По крайней мере, зная, что это не результат вашей собственной ошибки, вы должны быть спокойны и продолжать развиваться, зная, что он будет исправлен относительно скоро и не представляет риска для безопасности, поскольку только вы можете получить доступ к API-интерфейсу API для своего собственного проекта.

+0

Таким образом, авторизация с конечными точками для веб-клиента по-прежнему требует проверки подлинности на уровне пользователя? Что делать, если я просто хочу убедиться, что только клиент веб-приложения подключается к конечным точкам, но не хочет ли беспокоить отдельного пользователя для входа или авторизации? – Jabberwockey

+2

Ничего, я был в состоянии понять это. Мне нужно было использовать 'endpoints.get_current_user()! = None' (python) для проверки каждого вызова, который действительно есть пользователь, который разрешил текущий вызов. По-видимому, не существует способа авторизации вызовов конечных точек только с помощью приложения, не используя OAuth от пользователя. Было бы неплохо, если бы был способ сказать «Разрешить только вызовы из этого приложения» с конечными точками, но это работает пока. Благодаря! – Jabberwockey

+0

Эй, я рад, что вы поняли, как делать пользовательские авторизации без моего возвращения, поскольку я читал ваш комментарий раньше, но не мог сесть писать. Что касается вашего последнего комментария, нельзя сказать, что теперь есть способ сделать call-context auth - это именно то, для чего нужны идентификаторы/секреты клиента. Пользовательский auth предназначен для того, хотите ли вы проверить, что учетная запись пользователя OAuth2 для входа в систему разрешила ваше приложение иметь область userinfo.email и имеет действительный маркер-носитель, отправленный вместе с запросом. – Nick

0

Облачные конечные точки автоматически не активируют аутентификацию. Через аннотации вы отметили метод API для безопасного доступа.

Что вы должны сделать для каждого вызова, чтобы проверить объект пользователя и определить:

  • Это является действительным пользователем
  • ли собственные проверки авторизации для пользователя

Если это не соответствует вашим требованиям к авторизации и авторизации, вы должны иметь соответствующую логику для возврата правильного кода ошибки HTTP или некоторых других данных, если это анонимный вид доступа.

В инструкциях это в качестве третьего пункта: «Добавить проверку текущего пользователя (endpoints.get_current_user) для каждого метода, который вы хотите защитить».

+1

Это неправильный ответ на заданный вопрос, но то, что вы говорите относительно User auth, является правильным. Конечные точки имеют два уровня аутентификации. Существует слой идентификатора клиента ID, и есть пользовательский уровень авторизации. OP спрашивает, почему API-интерфейс API по-прежнему может выполнять запросы, если идентификатор клиента API-обозревателя отсутствует в списке разрешенных идентификаторов клиентов. – Nick

Смежные вопросы