我们已在iOS应用程序中集成Google sign,我们希望从服务器离线访问Gmail APIs。
我们正在向服务器提交token_Id
,但服务器正在抛出异常(服务器是Java):
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant",
"error_description" : "Bad Request"
}
要获取令牌ID,我们使用以下代码iOS代码:
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if (error == nil) {
let idToken = user.authentication.idToken
let fullName = user.profile.name
print("Connected for user: \(fullName)")
print("Id Token: \(idToken)")
setAppUserContext(userId: idToken!)
} else {
print("\(error.localizedDescription)")
}
}
我们正在向服务器发送user.authentication.idToken
以供离线访问。
范围如下:
gid?.scopes.append("https://www.googleapis.com/auth/gmail.readonly")
我们已经设置了所需的clientID& serverIds正确。
对于GIDSignIn,我们制作了以下属性:
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().signInSilently()
答案 0 :(得分:2)
invalid_grant通常有两个原因。
以这种方式使用ID令牌可能会很棘手。您正在使用的服务器上的时钟可能必须与在客户端上创建它的时间相匹配。我不是IOS开发人员,因此无法提供更多帮助。如果时区弄乱了你,你就无法验证id令牌。