1

Итак, я сделал несколько конечных точек облака, которые будут использоваться в приложении, и я прохожу процесс их защиты в Android-клиенте. Каждый раз, когда я пытаюсь использовать данные в коде клиента Android, я получаю ошибку 401 «Неавторизованный доступ». Я могу сказать, почему исключение выбрасывается, так как я игнорирую параметр «Пользователь» для каждого метода api. Но мой вопрос в том, почему я всегда получаю нулевой User для моих методов api. Я успешно предоставил строителю конечных точек правильные учетные данные и setSelectedAccountName с учетной записью на телефоне. Вот мой пример:Ошибка конечных точек для облачных вычислений 401 несанкционированный запрос

Один метод апи:

public CollectionResponse<Student> getAllStudents(User user) throws OAuthRequestException { 
     if (user == null) 
       throw new OAuthRequestException("BAD_USER"); 
     else { 
       List<Student> stud = ofy().load().type(Student.class).list(); 
       return CollectionResponse.<Student>builder().setItems(stud).build(); 
      } 
    } 

это помещается в верхней части API, а также:

@Api(name = "studentEndpoint", version = "v1", namespace = @ApiNamespace(ownerDomain = "appbackend.mymodule.example.com", ownerName = "appbackend.mymodule.example.com", packagePath=""), 
      scopes = {Constants.EMAIL}, 
      clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID}, 
      audiences = {Constants.ANDROID_AUDIENCE}) 

Я захватывая учетной записи электронной почты с помощью диспетчера учетной записи в моем android client, настройка учетных данных и получение токена доступа.

GoogleAccountCredential cred = GoogleAccountCredential.usingAudience(AddUser.this, AppConstants.AUDIENCE); 
       cred.setSelectedAccountName(emailAccount); 

это, как я использую его в моем код клиента:

StudentEndpoint service = AppConstants.getApiHandle(cred); 
       stud = service.getAllStudents().execute(); 

Приведенный выше код вызывается асинхронно.

У меня есть тройная проверка моих идентификаторов клиентов, чтобы убедиться, что они верны, и они есть. Я также устанавливаю это из студии Android прямо на свой телефон через adb. У меня есть debug SHA1 в облачной консоли google, но мне тоже нужен SHA1 для выпуска. Я не думал, что хочу, потому что я еще не создал ключи для этого приложения и использовал только неподписанную копию. Также, если я использую веб-клиент, я могу пройти аутентификацию, но каждый раз, когда я делаю запрос, я получаю ошибку 401, и я вижу, что мое исключение «BAD_USER» выбрано. У меня есть ключ «Bearer», показывающий, что у меня есть доступ.

Если я отменил nullcheck в параметре User в моем модуле, методы работают нормально, и я могу получить данные из своего хранилища данных. Поэтому любая причина, почему я получаю нулевого пользователя каждый раз, когда я делаю запросы api? Буду признателен за любую оказанную помощь. Заранее спасибо.

ответ

1

я бы предложил пересмотреть следующие 3 пункта:

  • Убедитесь, что ваше имя пакета правильно то же в обоих Android приложения и имя пакета, который был указан при создании учетных данных в облаке Консоль.

  • Можете ли вы проверить значение AppConstants.AUDIENCE в своем коде. В идеале это должно быть в следующем сервере в формате»: client_id: WEB_CLIENT_ID»

  • Убедитесь, что ваш Constants.WEB_CLIENT_ID такое же, как Constants.ANDROID_AUDIENCE

+0

Спасибо, я чувствую себя глупо не замечать этого, но я был мой Constants.ANDROID_AUDIENCE = "WEB_CLIENT_ID" вместо = WEB_CLIENT_ID .... это заставляет его работать на устройстве Android, но я все еще получаю ошибку 401 в веб-клиенте –

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