初始身份验证后执行Google Federated Login / oAuth2

时间:2011-11-30 21:13:44

标签: oauth openid google-api access-token

我正在尝试支持“混合”联合登录和oAuth2(使用this document中的逻辑)来提供以下网络服务:

  1. 在我的网站上支持使用您的Google帐户登录。也就是说,从文档:您还可以选择使用Google的身份验证系统来为您的应用程序外包用户身份验证。这可以消除创建,维护和保护用户名和密码存储的需要。
  2. 访问用户的Google Analytics。
  3. 以下是我所做的步骤。

    1. 我向 https://accounts.google.com/o/oauth2/auth 提出了我想要访问的范围(Google Analytics)的请求。
    2. 我被重定向到谷歌,它有我的图标以及我请求访问的范围。我授予访问权限。
    3. 我被重定向回回调页面。
    4. 我得到了令牌(访问和刷新),以及一个巨大的id_token字符串(我不知道),并将所有这些信息存储在我的数据库中。
    5. 然后我打电话给 https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxxyyyzzz 以获取用户的电子邮件和姓名,并将此信息也存储在我的数据库中。我还注意到它返回一个 id 字段,据我所知,这个字段永远不会改变,我认为它是某种独特的标识符。我也存储了这个。
    6. 问题:如果我在我的Google帐户中转到授权访问您的Google帐户部分,则表明我的网站可以访问“Google Analytics。但是,它没有说签名使用您的Google帐户。这就是我要完成的工作。我原以为使用逻辑会启用使用您的Google帐户登录。我做错了什么?是谷歌的适用电话,以便用户可以登录我的网站?

4 个答案:

答案 0 :(得分:1)

如果您的网站可以使用OAuth访问您的通讯录或Google Analytics,您将永远不会看到“使用您的Google帐户登录”。我非常确定只有在您只使用OpenID(非OAuth)进行登录时才会这样做。

具体而言,OAuth用于授予您访问API以创建/更新/删除数据的权限,而OpenID则用于登录。

答案 1 :(得分:0)

如果您询问如何识别用户以便将来登录,您有两种选择:

  • 将OAuth与OpenID混合使用,称为混合。我已将其描述为on this answer

  • 成功进行OAuth授权后,使用userinfo范围并请求userinfo(电子邮件等)。它在Google OAuth 2 documentation

  • 中有所描述

如果您的意思是在以后的访问中自动登录您的网站,您可以使用OpenID“立即模式”(openid.mode参数)。

答案 2 :(得分:0)

当用户被重定向回来时,您从自己的(服务器端?)代码调用第二个请求,并获取他们的电子邮件地址。成功获取后,表示用户已登录。您可以将其添加到会话中(例如,作为cookie),只要您拥有它,用户就会登录。您通过忘记电子邮件地址使用户注销,因此请清除会话/ cookie。

答案 3 :(得分:0)

将此参数添加到https://accounts.google.com/o/oauth2/auth网址电话:approval_prompt=force,然后使用您的Google帐户登录将始终显示,无论用户是否已登录或任何其他帐户。

所以调用就像这个https://accounts.google.com/o/oauth2/auth?client_id=<client id>&redirect_uri=<uri>&scope=<scope>&access_type=<online or offline>&response_type=code&approval_prompt=force

相关问题