Доступ к защищенному IAP-ресурсу Google Cloud с токеном-носителем дает код ошибки 13 - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь получить доступ к ресурсу, защищенному Google Cloud IAP, из моего приложения для iOS.

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

"Произошла ошибка с вашим запросом. Код ошибки 13"

Я попытался отправить запрос почтальону, но это также привело к той же ошибке.

Я использую следующий код для установки идентификатора клиента из загруженного файла credentials.plist.

if let path = Bundle.main.path(forResource: "credentials", ofType: "plist") {
   let nsDictionary = NSDictionary(contentsOfFile: path)
   let clientId = nsDictionary!["CLIENT_ID"] as? String

   GIDSignIn.sharedInstance().clientID = clientId
   GIDSignIn.sharedInstance().delegate = self
   GIDSignIn.sharedInstance().uiDelegate = self;
}

После этого я вхожу в Google.

if GIDSignIn.sharedInstance().hasAuthInKeychain() {
   GIDSignIn.sharedInstance().signInSilently()
} else {
   GIDSignIn.sharedInstance().signIn()
}

После входа в систему я беру idToken и отправляю его на ресурс, защищенный Google Cloud IAP.

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
   let token = user.authentication.idToken

   var request = URLRequest(url: URL(string: url)!)

   request.httpMethod = httpMethod
   request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")

   URLSession.shared.dataTask(with: request, completionHandler: { data, response, error -> Void in
    }).resume()
}

Я ожидал бы успешного ответа, но в настоящее время я получаю код ошибки HTTP 401 вместе с ранее упомянутым сообщением об ошибке.

1 Ответ

0 голосов
/ 16 февраля 2019

Обновление: По состоянию на 11 июля пользователи IAP теперь должны получать более описательную ошибку, чем "Код ошибки 13", когда возникают проблемы с токеном.

Некоторые примеры:

$ curl -H 'Authorization: bearer schmearer' $IAP_URL
Invalid IAP credentials: Expected JWT to have 3 parts separated by a '.' but there are 1 parts
$ curl -H 'Authorization: bearer a.b.c' $IAP_URL
Invalid IAP credentials: Base64 decode failed on token: a.b.c
> ^C
msachs@msachs-ubi:~$ curl -H 'Authorization: bearer [real token]' $IAP_URL
Invalid IAP credentials: JWT signature is invalid
msachs@msachs-ubi:~$ curl -H 'Authorization: bearer [real token]' $IAP_URL
Invalid IAP credentials: JWT audience doesn't match this application ('aud' claim (5939454960-[...]) doesn't match expected value (1042451928015-[...]))

«Код ошибки 13» означает, что IAP не нравится что-то в вашем токене.В этом случае, я думаю, проблема в том, что вам нужно установить для свойства serverClientId идентификатор клиента, используемый вашим приложением IAP.Вы можете найти это, перейдя в IAP-консоль , найдя ресурс, к которому вы подключаетесь, и выбрав «Редактировать OAuth-клиент» в меню переполнения в строке таблицы этого ресурса.

Наша документация , кажется, пропускает этот шаг, я позабочусь об этом.(Спасибо, что отметили это!)

...