【问题标题】:YouTube OAuth2 authorization fails on reauthorizationYouTube OAuth2 授权在重新授权时失败
【发布时间】:2014-01-25 09:46:51
【问题描述】:

我创建了自己的 OAuth2 客户端来连接到 google API(特别是 YouTube)。我第一次授权时所有作品都按预期进行:

  • 我使用适当的参数(response_type=coderedirect_uri=urn:ietf:wg:oauth:2.0:oob 等)执行 POSThttps://accounts.google.com/o/oauth2/auth
  • 我在 UIWebView 中处理响应,让用户通过登录对话框
  • 我从最后一页的标题中获取了请求令牌所需的授权码
  • 我向https://accounts.google.com/o/oauth2/token 发出令牌请求POST
  • 我获得了 access_token 和 refresh_token 等存储在我的应用程序中

但是,我有一个退出按钮,这就是问题所在;这基本上将我存储在我的应用程序中的access_tokenrefresh_token 设置回nil,就是这样:

- (void)clearCredentials
{
    _accessToken = nil;
    _refreshToken = nil;
    _tokenExpirationDate = nil;
}

当我想再次登录时,我调用和以前一样的授权方法,所有参数都像第一次一样正确设置。 但是,在通过登录对话框时,我没有得到我将授予应用程序访问 youtube 帐户的页面,因此也没有得到我可以从页面标题中获取授权代码的页面。相反,它向我显示了一个错误页面 (invalid_request),提示我未能提供 response_type

我还尝试撤销access_token。撤销按预期工作,但在授权后,我仍然无法获得用户可以再次批准权限的页面。

任何人有线索可以为我指明正确的方向吗?我该怎么办?

【问题讨论】:

    标签: ios iphone youtube oauth-2.0 google-oauth


    【解决方案1】:

    我真的认为不应该使用 UIWebView。它迫使用户输入密码(以及 2 个因素的 OTP)和糟糕的用户体验,从安全的角度来看也是糟糕的。您可以重定向到 safari 浏览器并获取令牌返回查看 https://plus.google.com/+NaveenAgarwal/posts/AztHNnQh7w6

    或使用 Google+ SDK。它会重定向到现有的 Google 应用程序之一或浏览器并为您获取令牌。

    【讨论】:

    • 据我所知,Google+ SDK 中使用的 Google 自己的 oauth2 客户端也使用了 UIWebView。 (请参阅 code.google.com/p/gtm-oauth2 和 YouTube 应用)。
    • 是的,那是几年前写的,当时没有其他选择。现在有更好的选择,新客户应该使用它们。使用 sdk 意味着用户只需点击接受。输入userid,pw对于每个应用的用户来说都是相当痛苦的。
    【解决方案2】:

    原来是UIWebView 存储的 cookie 存在问题。 使用https://accounts.google.com/o/oauth2/approval 作为 url 删除 cookie 存储中的 cookie 解决了它。

    这是我从页面标题中获得授权码后用来删除相应cookies的简化代码:

    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    
    NSArray *cookies = [storage cookiesForURL:[[_webView request] URL]];
    
    for (NSHTTPCookie *cookie in cookies)
    {
        [storage deleteCookie:cookie];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-24
      • 2020-07-16
      • 2012-10-06
      • 2020-04-03
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多