Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 使用承载令牌访问受Google Cloud IAP保护的资源时出现错误代码13_Google App Engine_Google Iap - Fatal编程技术网

Google app engine 使用承载令牌访问受Google Cloud IAP保护的资源时出现错误代码13

Google app engine 使用承载令牌访问受Google Cloud IAP保护的资源时出现错误代码13,google-app-engine,google-iap,Google App Engine,Google Iap,我正在尝试从iOS应用程序访问受Google Cloud IAP保护的资源 我可以从应用程序登录到我的Google帐户并收到一个ID令牌,但是当在我想要请求的资源的授权头中将ID令牌设置为承载令牌时,我收到以下带有HTTP错误代码401的响应 “您的请求有问题。错误代码13” 我试图与邮递员一起发送请求,但这也导致了相同的错误 我使用以下代码从下载的credentials.plist文件中设置客户端ID if let path = Bundle.main.path(forResource: "c

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

我可以从应用程序登录到我的Google帐户并收到一个ID令牌,但是当在我想要请求的资源的授权头中将ID令牌设置为承载令牌时,我收到以下带有HTTP错误代码401的响应

“您的请求有问题。错误代码13”

我试图与邮递员一起发送请求,但这也导致了相同的错误

我使用以下代码从下载的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;
}
之后我登录谷歌

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

更新:从7月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不喜欢您的令牌。在这种情况下,我认为问题在于您需要将设置为IAP应用程序使用的客户端ID。您可以通过转到,找到要连接的资源,并从该资源的表行的溢出菜单中选择“Edit OAuth Client”来找到它

好像错过了那一步,我会处理好的。(感谢您对此进行标记!)

这一点现在记录在。