使用不记名令牌访问 Google Cloud IAP 保护的资源会出现错误代码 13

Accessing Google Cloud IAP protected resource with bearer token gives error code 13

我正在尝试从我的 iOS 应用访问受 Google Cloud IAP 保护的资源。

我可以从应用程序登录我的 Google 帐户并接收 ID 令牌,但是当在授权中将 ID 令牌设置为 Bearer 令牌时,我收到以下响应和 HTTP 错误代码 401 header 我想要请求的资源。

"There was a problem with your request. Error code 13"

我尝试用 Postman 发送请求,但也出现了同样的错误。

我使用以下代码从下载的 credentials.plist 文件中设置客户端 ID。

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云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 以及前面提到的错误消息。

更新: 自 7 月 11 日起,当令牌出现问题时,IAP 用户现在应该会收到比 "Error code 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-[...]))

"Error code 13" 表示 IAP 不喜欢您的令牌。在这种情况下,我认为问题在于您需要设置 serverClientId property to the client ID used by your IAP app. You can find this by going to the IAP console,找到您要连接的资源,然后从该资源的 table 行的溢出菜单中选择 "Edit OAuth Client" .

Our documentation 似乎缺少这一步,我会解决的。 (感谢您举报!)