Неверный код аутентификации HTTP 400 во время обмена кодом аутентификации Google OAuth для токенов в приложении AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Неверный код аутентификации HTTP 400 во время обмена кодом аутентификации Google OAuth для токенов в приложении Android

Сообщение Anonymous »

Я пытаюсь разобраться в этом уже больше недели, но не вижу, в чем заключается проблема в моем процессе. Я создаю мобильное приложение для Android, используя Kotlin. Моя текущая цель — выдать себя за пользователя и создать событие календаря в календаре Google, используя лямбда-функцию в AWS. У меня уже есть эта настройка аспекта. Однако для того, чтобы добавить событие календаря с помощью лямбда-функции, мне нужно иметь код аутентификации и токен доступа. Поэтому при входе в Google при использовании приложения я хочу перенести код аутентификации и токен доступа для последующего использования в моем приложении. Однако у меня возникли проблемы с HTTP 400, из-за которых возникла неверная ошибка кода аутентификации. Но я проверил форматирование и не вижу, в чем проблема в моем коде и конфигурации.
При входе в систему с использованием OAuth я получаю код аутентификации в формате JWT. Я могу декодировать код аутентификации и заметить, что в моей полезной нагрузке атрибут aud имеет то же значение идентификатора клиента, которое я использую, чтобы попытаться обменять код на токен. Я скопировал и вставил идентификатор клиента, а также секреты клиента и URI перенаправления, связанный с моим веб-клиентом Google OAuth. Учитывая эту информацию, я предполагаю, что у меня правильный идентификатор клиента, секретный код клиента, правильный URI перенаправления, и мой код аутентификации, похоже, находится в хорошем состоянии.
При декодировании код аутентификации, я не заметил никаких проблем с подписью или заголовком, полезная нагрузка была правильной, насколько я мог видеть, я попросил чатгпт проверить, просто чтобы убедиться, и здесь все в порядке.
Это код, в котором я допускаю ошибку:

Код: Выделить всё

val tokenResponse = googleAuthService.exchangeCodeForToken(
code = authCode,
clientId = "CLIENT ID pasted from credentials",
clientSecret = "CLIENT SECRETS pasted from credentials",
redirectUri = "FIREBASE URI pasted from credentials",
grantType = "authorization_code"
)
Это синтаксис моей ошибки:

Код: Выделить всё

HTTP 400 Error: {"error": "invalid_grant","error_description": "Malformed auth code."}
Я также намеренно помещал неверные данные для определенных атрибутов, чтобы посмотреть, изменится ли синтаксис ошибок. Используя этот подход, я обнаружил, что когда я помещаю неверные данные в код аутентификации, это сообщение об ошибке не меняется.
Поэтому похоже, что проблема связана с самим кодом аутентификации.
Итак, на данный момент у меня сложилось впечатление что мой идентификатор клиента, мой секрет клиента, мой URI перенаправления и мой тип предоставления верны.
Я вижу, что проблема связана с инициализирующим запросом, где, возможно, мне нужно указать области действия? Но поскольку предыдущий метод устарел, у меня возникли проблемы с setScope, который был рекомендован для chatgpt.
Возможно, мне нужно указать области действия во время инициализацииCredentialRequest? В настоящее время я использую это:

Код: Выделить всё

val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId("CLIENT ID")
.setAutoSelectEnabled(true)
.build()

val request = GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
После того, как это будет определено, я обработаю вход:

Код: Выделить всё

is CustomCredential -> {
if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
try {
// Use googleIdTokenCredential and extract id to validate and
// authenticate on your server.
val googleIdTokenCredential = GoogleIdTokenCredential
.createFrom(credential.data)

// Get ID token and email from the credential
val idToken = googleIdTokenCredential.idToken
val email = googleIdTokenCredential.id
Log.e(ProfileActivity.TAG,"idToken: $idToken")
if (idToken != null && email != null) {
val intent = Intent(this@SignInActivity, ProfileActivity::class.java).apply {
putExtra("id_token", idToken)
putExtra("email", email)
}

startActivity(intent)
finish()
} else {
Log.e(TAG, "ID token or email is null")
}

} catch (e: GoogleIdTokenParsingException) {
Log.e(TAG, "Received an invalid google id token response", e)
}
} else {
// Catch any unrecognized custom credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}

else -> {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
После этого я перехожу к классу ProfileActivity, чтобы обменять код аутентификации на токен доступа, чтобы позже с помощью функций приложения использовать токен доступа и код аутентификации, чтобы выдать себя за пользователя и создать событие календаря в календаре Google.
Возможно, мне нужно установить области действия в googleIdOption? Что я могу сделать, чтобы попытаться поместить код аутентификации в правильный формат для обмена кодом аутентификации на токены обновления и доступа?

Подробнее здесь: https://stackoverflow.com/questions/786 ... r-tokens-o
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»