Google OpenId和Google API

时间:2013-05-04 17:11:20

标签: oauth-2.0 openid

我尝试使用google实现openID登录,然后获取访问令牌以访问google apis(例如google plus或驱动器)

第一次尝试是成功但有一个大问题:

  • 制作openId内容,并将用户重定向到谷歌以表明身份,然后返回我的应用程序识别。
  • 使用google apis创建oAuth内容,再次重定向用户以识别自己并使用代码回复,然后交换代码以获取调用google apis所需的访问令牌。

用户需要识别两次。那不好。

我阅读并试用了google hybrid openId and oAuth。所有链接都指向不推荐使用的oAuth1接口,我无法使其工作,我得到用户标识,但没有request_token继续oAuth的东西。

所以我有几个问题:

  • 有没有办法识别用户再次google openId并同时获得用户同意访问google apis?
  • 混合协议是否仍在使用oAuth2和新的google apis?
  • 我是好方法还是我错过了什么?

我需要openId和oAuth beacouse应用程序需要在google marketplace中,并且必须使用openId登录用户,我需要点击一些需要oAuth2 access_token的API。

谢谢!

2 个答案:

答案 0 :(得分:0)

为什么你需要同时处理OpenID和OAuth,并且有两个登录屏幕? 如果您只是使用OAuth 2.0工作流程,则用户只需输入一次凭据,您就可以执行任何操作。

一旦用户同意OAuth工作流程中的登录/权限屏幕,您的应用就会获得访问令牌。如果您需要任何客户信息,例如欢迎用户屏幕 - 您只需要使用访问令牌点击https://www.googleapis.com/oauth2/v1/userinfo端点,它将为您提供用户的公共信息。因此,简而言之,您可以使用OAuth流程完成大部分工作,并且用户只需登录一次。

祝你好运!随意提出更多问题。

答案 1 :(得分:0)

好的,最后我有一个有效的解决方案,这就是为我制作技巧的“神奇”网址:

String url = "https://accounts.google.com/o/oauth2/auth?"
  + "client_id="+ GoogleapiAuthHelper.CLIENT_ID +"&"
  + "response_type=code&"
  + "scope=openid%20profile%20https://www.googleapis.com/auth/plus.me&"
  + "redirect_uri="+GoogleapiAuthHelper.REDIRECT_URI+ "&"
  + "state=security_token%3Dasdalskjqwo91231029";

if( userService.getCurrentUser() != null ){
   url += "&login_hint=" + userService.getCurrentUser().getEmail(); 
}

步骤:

  • 首先,用openId识别用户,用户进入登录界面并输入他的凭据。
  • 用户返回已识别到应用程序
  • 将用户重定向到上面的网址。 param login_hint使得用户不需要再次识别,对此url的响应是使用oAuth代码的重定向,您可以轻松地交换欲望访问令牌。

在阅读了所有Google Plus API,Google Drive API,oAuth2和openId文档后,指向我的方向的文档是https://developers.google.com/accounts/docs/OAuth2Login?hl=es

我不知道这是否是实现openId + oAuth的最佳方式,但它有效并且我无法以任何其他方式工作。希望这可以帮助别人。