我正在使用Google SignIn在我的某个iOS应用程序中进行身份验证。有了这个我定义了谷歌驱动器使用的所有可能的范围,但仍然收到以下错误。我在Google云端硬盘上创建了不同的文件。
Domain=com.google.GTLRErrorObjectDomain Code=403 "Insufficient Permission"
UserInfo={GTLRStructuredError=GTLRErrorObject 0x170450d10: {message:"Insufficient
Permission" errors:[1] code:403}, NSLocalizedDescription=InsufficientPermission
我使用Google SignIn将范围定义为:
[[GIDSignIn sharedInstance].scopes
arrayByAddingObject:@[kGTLRAuthScopeDriveFile,kGTLRAuthScopeDrive,
kGTLRAuthScopeDriveMetadata]];
Google Drive API已在Google控制台上启用,但我仍然不知道为什么会收到此错误。我还尝试在控制台上为Google云端硬盘服务启用“OAuth 2.0”,但谷歌不允许我自动将其关闭。任何帮助将不胜感激。
答案 0 :(得分:0)
谷歌改变了它的API的身份验证政策。现在,他们不允许使用OAuth流的本机Web视图,但会推动用户使用OS浏览器。如果用户想要使用Google服务,他们还会引入用于用户登录的Google SignIn按钮SDK。 Google SignIn按钮(GIDSign)为用户处理一些身份验证流程。用户还可以使用更新的“GMTAppAuth”和“AppAuth”来实现GTMFetcherAuthorizationProtocol,以授权AppAuth请求。我在我的某个应用程序中使用了Google Drive API,并使用“GTMOAuth2ViewControllerTouch”进行Google登录和身份验证,但在更新后,它停止了工作。在我上面提到的问题中,我使用Google SignIn进行身份验证。在旧代码中,您可以使用Authentication NSString *常量“GTLRAuthScopeDriveFile”来定义范围,但现在他们改变了方式,这就是我收到错误的原因。
定义范围的旧方法:
- (GTMOAuth2ViewControllerTouch *)createAuthController {
NSArray *scopes = [NSArray arrayWithObjects:kGTLRAuthScopeDriveFile, kGTLRAuthScopeDrive,nil];
authController = [[GTMOAuth2ViewControllerTouch alloc]
initWithScope:[scopes componentsJoinedByString:@" "]
clientID:kClientID
clientSecret:nil
keychainItemName:kGTMAppAuthKeychainItemName
delegate:self
finishedSelector:@selector(viewController:finishedWithAuth:error:)];
return authController;
}
新的纠正方式:
NSString *driveFile = @"https://www.googleapis.com/auth/drive.file";
[GIDSignIn sharedInstance].scopes = [currentScopes arrayByAddingObject:driveFile];