Аутентификация моего «приложения» к облачным конечным точкам Google, а не «пользователь»,

То, что я пытаюсь сделать, – это аутентифицировать приложение для Android в облачной конечной точке Google. В основном конечные точки должны позволять моему Android-приложению получать доступ к методам и ничего больше.

Я сделал это –

  1. Создайте идентификатор клиента, используя значение SHA1 в Eclipse в Google Cloud Console.

  2. Создайте идентификатор веб-клиента в Google Cloud Console для моего проекта конечной точки.

  3. Добавьте оба этих идентификатора клиента в «@Api», упомянутых на каждой конечной точке.

  4. Добавьте дополнительный «пользовательский» параметр в методах конечных точек.

  5. Восстановите и разверните бэкэнд в облаке.

Но когда я запускаю это, «пользователь» всегда приходит как «null». Я нахожусь на своем пути, пытаясь найти правильный рабочий метод для всего этого.

Я искал много форумов, но никаких правильных ответов нигде.

Вот еще одно подобное сообщение. Ограничьте доступ к конечным точкам Google Cloud для Android-приложения.

Это ссылка, которую я использую – https://developers.google.com/appengine/docs/java/endpoints/auth

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

Solutions Collecting From Web of "Аутентификация моего «приложения» к облачным конечным точкам Google, а не «пользователь»,"

Похоже, он работает по назначению. Вы контролируете, какие клиентские приложения могут вызывать методы вашей конечной точки через идентификаторы клиентов, как вы уже делали. Пользовательский параметр вводится как null, потому что вы не выполняете аутентификацию конечного пользователя. Пользовательский параметр представляет фактического реального пользователя (учетную запись Google). Поэтому, если вам не нужны методы аутентификации конечного пользователя, вы просто не можете определить параметр User или игнорировать нулевое значение. Вы сказали, что ваша проблема в том, что параметр User установлен равным null. Что вы ожидаете от этого сценария?

Вам нужно вызвать аутентификацию на клиенте, а затем, возможно, используемая вами библиотека будет «вводить» информацию пользователя.

Вот что сработало для меня:

Допустим, у вас есть ключи ниже:

static final String WEB_CLIENT_ID = "somekeyfor webclientid.apps.googleusercontent.com"; 

Static final String ANDROID_CLIENT_ID = "somekeyfor androidclientid.apps.googleusercontent.com"; Static final String ANDROID_AUDIENCE = WEB_CLIENT_ID;

Ваша авитация Api должна выглядеть так:

 @Api( name = "yourapiname", clientIds = {CloudEndpoint.WEB_CLIENT_ID,CloudEndpoint.ANDROID_CLIENT_ID}, audiences = {CloudEndpoint.ANDROID_AUDIENCE}, version = "v1", namespace = @ApiNamespace( ownerDomain = "myapp.app.com", ownerName = "myapp.app.com", packagePath = "" ) ) 

В аннотации ниже обратите внимание, как ваша аудитория является переменной -> ANDROID_AUDIENCE, которая равна WEB_CLIENT_ID.

Теперь, когда вы создаете объект googleAccountCredential, вы должны передать идентификатор веб-клиента следующим образом:

 mAccountCredentials = GoogleAccountCredential.usingAudience(getApplicationContext(),"server:client_id:" + "yourwebclientID"); 

Обратите внимание, что даже если это правильно сделано, ваш пользовательский объект в конечной точке все равно может появиться как Null, если имя учетной записи, которое вы передаете в файле mAccountCredentials.setSelectedAccountName («accontname»), не существует на устройстве. Поэтому убедитесь, что имя учетной записи, которое вы передаете, существует на устройстве Android, перейдя в -> (Настройки / Учетные записи)