【问题标题】:OAuth 2.0 for Installed Applications - where do I get a redirect_uri已安装应用程序的 OAuth 2.0 - 我在哪里可以获得 redirect_uri
【发布时间】:2016-02-01 00:55:02
【问题描述】:

我正在了解使用 OAuth2 在已安装 (Windows) 应用程序中访问 Gmail 的说明,位于页面 https://developers.google.com/identity/protocols/OAuth2InstalledApp。在我谈到“发出令牌请求”部分之前,这一切似乎都很简单。我必须做的 POST 的参数之一是 redirect_uri,它说的是“您从开发者控制台获得的重定向 URI。”

我已从开发者控制台获取了我的 ClientID 和 ClientSecret,但看不到我从中获取 redirect_uri 的任何地方。

我错过了什么?谢谢。

【问题讨论】:

  • 已安装应用程序(开发控制台上的本机客户端)的重定向 URI 是 urn:ietf:wg:oauth:2.0:oob。但是你不应该真的需要它,我想这取决于你使用的客户端库。
  • 这是初始身份验证请求的redirect_uri,发送到accounts.google.com/o/oauth2/v2/auth。我对那个没意见。我的问题是关于下一笔交易,在该页面的“处理响应并发出令牌请求”标题下。这似乎是一个不同的redirect_uri,目前尚不清楚如何获取它。
  • 想分享一些代码你在哪一步你有验证码吗?
  • 是的,我有授权码(正如谷歌所说的那样),它是从我显示的浏览器窗口复制进来的,以获取用户的授权。我看不出我的代码如何做到这一点。我只需要帮助理解我需要做的下一个事务,特别是参数redirect_uri,页面将其描述为“您从开发者控制台获得的重定向URI。”。这是发布到 /oauth2/v4/token 端点的事务,带有参数 code、client_id、client_secret、redirect_uri 和 grant_type。
  • 我有一个帖子。看看这是否有帮助 daimto.com/google-3-legged-oauth2-flow 我试着让它比谷歌的例子更简单

标签: oauth google-api google-oauth google-apps google-cloud-platform


【解决方案1】:

身份验证基本上是三个或四个步骤的过程

第一步就是获取验证码。这个链接可以放在任何浏览器窗口中,它是一个 HTTP GET

https://accounts.google.com/o/oauth2/auth?client_id={clientid}.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code

一旦用户接受访问,您将获得一个验证码。

该代码被发送回服务器以获取刷新令牌和第一个访问令牌。这是一个 HTTP POST。

https://accounts.google.com/o/oauth2/token
code=4/X9lG6uWd8-MMJPElWggHZRzyFKtp.QubAT_P-GEwePvB8fYmgkJzntDnaiAI&client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code

响应将是这样的

{
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4"
}

访问令牌只能工作一小时,过期后您需要使用刷新令牌来获取新的访问令牌。

这也是一个 HTTP 帖子

https://accounts.google.com/o/oauth2/token
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token

回复

{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}

代码已从我的教程Google 3 legged oauth2 中提取,它的解释比这更多。

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2015-09-25
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多