我们有一个iOS应用程序,使用Google oAuth通过嵌入式浏览器向用户询问Google日历的权限 . 用户通过应用程序登录并授予其日历权限,oAuth授权的刷新令牌和日历ID存储在加密数据库中 . 使用此刷新令牌和日历ID - 它们的日历项目将显示在单独的Web应用程序上(无需再次请求客户端凭据) . 在今年4月20日嵌入式浏览器中的Google授权请求被阻止之前,这种情况很有用 . 在此之前,我们使用了单个oAuth客户端ID,并在iOS和Web应用程序中使用了客户端ID和机密 . 但是,在4月20日之后,我们不得不创建一个单独的iOS客户端密钥 . 现在的问题是,虽然在iOS应用程序中,我们可以使用以下代码向用户请求日历权限:

OIDAuthorizationRequest *request = [[OIDAuthorizationRequest alloc] initWithConfiguration:configuration clientId:GoogleCustomKey scopes:@[OIDScopeOpenID, OIDScopeProfile, OIDScopeEmail, @"https://www.googleapis.com/auth/calendar", @"https://www.googleapis.com/auth/calendar.readonly", @"https://www.googleapis.com/auth/tasks", @"https://www.googleapis.com/auth/tasks.readonly"] redirectURL:[NSURL URLWithString:GoogleRedirectUri] responseType:OIDResponseTypeCode additionalParameters:nil];

但是现在我们无法再使用Web应用程序上的刷新令牌显示用户日历 . 在Web应用程序中,调试Web应用程序代码时出现"Unauthorized access"错误 . 但根据Google的文档,允许跨客户端授权https://developers.google.com/identity/protocols/CrossClientAuth . 我们不确定我们缺少什么?谢谢 .