2013-05-04 129 views
0

我试图实现与谷歌的OpenID登录,然后得到一个存取权限令牌来访问谷歌的API(例如谷歌加,或驱动器)谷歌OpenID和谷歌的API

第一个学尝试是成功的,但有一个很大的问题:

  • 使openId的东西,和用户重定向到谷歌识别自己,然后返回到我的应用程序标识。
  • 用谷歌apis制作oAuth的东西,再次重定向用户以标识自己并回滚一段代码,然后交换访问令牌的代码以调用谷歌apis。

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

我阅读并尝试了google hybrid openId and oAuth。那里的所有链接指向已弃用的oAuth1接口,并且我无法使其工作,我得到用户标识但不是request_token继续oAuth的东西。

所以我有几个问题:

  • 有没有一种方法来识别用户agains谷歌的OpenID,并在同一时间获得用户同意访问谷歌的API?
  • 混合协议仍然与oAuth2和新的谷歌API一起工作?
  • 我在好的方式或缺少的东西?

我既需要的OpenID和OAuth beacouse的应用程序需要在谷歌市场,是用户登录使用OpenID必须的,我需要打一些API需要的oauth2的access_token。

谢谢!

回答

0

OK,最后我有一个有效的解决方案,这就是“神奇”的网址,使的伎俩对我来说:

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,用户去登录屏幕并输入他的凭据。
  • 用户返回与应用程序一致
  • 将用户重定向到上面的URL。param login_hint使得用户不需要再次标识,并且对这个url的响应是一个带有oAuth代码的重定向,您可以轻松地交换所需的访问令牌。

阅读所有的谷歌加API后,谷歌云端硬盘API,OAuth2用户和OpenID文档,该文档是指向我的分辩方向为https://developers.google.com/accounts/docs/OAuth2Login?hl=es

我不知道这是否是实现的最佳途径openId + oAuth,但它工作,我不能让它以任何其他方式工作。希望这可以帮助某人。

0

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

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

祝你好运!随时跟进更多的问题。

+0

感谢您的回复。如果您希望在Google Marketplace中使用应用程序,并且我需要它,那么我需要openId becouse,因此用户必须与openId一致。我需要oAuth2因为我想打Google Plus API – 2013-05-05 10:45:28

+0

这就是我说的好友,用户的身份也可以通过OAuth识别。为什么不使用它?获得令牌后 - 点击我提到的可帮助识别用户的端点。 – divyanshm 2013-05-05 14:11:59

+0

有用户也可以使用oAuth进行识别。在说出以下内容时,我可能不会理解[google文档](https://developers.google.com/google-apps/marketplace/sso):必须在所有可安装的Apps Marketplace应用程序中使用OpenID Single Sign-On(SSO)提供无缝登录体验。 – 2013-05-05 18:47:24