菜鸟教程小白 发表于 2022-12-12 22:48:28

ios - 如何从 Google YouTube Data API OAuth 2 iOS 获取刷新 token


                                            <p><p>我正在使用 <code>OAuthSwift</code> pod 进行 Google API 身份验证。在回调中,缺少刷新 token 。由于 Google 返回 <code>500 服务器错误</code>,当用户已通过身份验证后尝试请求新 token 时,我想存储刷新 token ,并在用户下次登录时授权,并检索新 tokentoken 。 </p>

<p>这是我的代码:</p>

<pre><code>         let callback = &#34;\(Bundle.main.bundleIdentifier ?? &#34;&#34;):/oauth2Callback&#34;
            _ = ytOAuth2Swift?.authorize(
                withCallbackURL: URL(string: callback)!,
                scope: &#34;https://www.googleapis.com/auth/youtube&#34;, state: state,
                success: { credential, response, parameters in

                   print(&#34;YouTube Access_Token \(credential.oauthToken)&#34;)
                  print(&#34;YouTube efreshR_Token \(credential.oauthRefreshToken)&#34;)
                },
                failure: { error in
                  print(&#34;ERROR: \(error.localizedDescription)&#34;)
            }
            )
</code></pre>

<p>这是我们得到的回复!</p>

<p> <a href="/image/lTywJ.png" rel="noreferrer noopener nofollow"><img src="/image/lTywJ.png" alt="Response Parameters"/></a> </p>

<p>根据 Google API 文档,这是应该进来的响应:</p>

<pre><code>{
   &#34;access_token&#34;:&#34;1/fFAGRNJru1FTz70BzhT3Zg&#34;,
   &#34;expires_in&#34;:3920,
   &#34;token_type&#34;:&#34;Bearer&#34;,
   &#34;refresh_token&#34;:&#34;1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI&#34;
}
</code></pre>

<p>我尝试使用嵌入式 <code>WebView</code> 不走运:</p>

<p>[ <img src="/image/1vLWh.png" alt="mbedded WebView error messageE"/> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>看起来 google API 一开始就给了你一次刷新 token ,而新的请求不再给它了。如果是,您应该知道 refresh_token 仅在第一次授权时提供,因此如果您授权多次,它可能不会再次返回 refresh_token。请尝试以下说明:</p>

<ul>
<li>转到您的帐户安全设置:<a href="https://www.google.com/settings/u/1/security" rel="noreferrer noopener nofollow">https://www.google.com/settings/u/1/security</a> .</li>
<li>点击“授权应用程序和网站”旁边的编辑按钮。</li>
<li>然后点击您的应用旁边的“撤消访问权限”。</li>
</ul>

<p>在它之后你的下一个调用也应该返回一个 refresh_token</p>

<p>可能有点不同,因为我的面板中没有使用英语。当我使用谷歌的 refresh_token 时,它永远不会过期,你可以永远使用它来创建新的 access_tokens。</p>

<p><strong>另一种解决方案</strong></p>

<p>如果它不起作用,请尝试在您的代码中将 access_type 设置为离线(我认为最简单的方法是在您的 API url 中添加一个 GET 参数作为 <code>access_type=offline</code>)。 </p>

<p>必要的也可能是查询中的<code>prompt=consent</code>。它将强制用户授权,然后应该返回 refresh_token</p>

<p>更多信息请见 <a href="https://developers.google.com/identity/protocols/OAuth2WebServer#offline" rel="noreferrer noopener nofollow">Google Documentation: Oauth2</a> </p>

<p><strong>提示</strong></p>

<p>Google API 的好处是 refresh_token 永远不会过期,直到您不会撤销它或创建一个新的。因此,您甚至可以对其进行硬编码,并在每次想要获得新的 access_token 时使用。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何从 Google YouTube Data API OAuth 2 iOS 获取刷新 token ,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/40624926/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/40624926/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何从 Google YouTube Data API OAuth 2 iOS 获取刷新 token