Google OAUTH + OpenID解决方案

http://blog.csdn.net/hereweare2009/article/details/4018274


 

Google OAUTH + OpenID解决方案

分类: Open API   8267人阅读  评论(2)  收藏  举报

       在前面已经介绍过OAuth与OpenID,这两种服务,Google都实现了。我们可以通过Google OAuth服务为Google 用户的资源进行授权,如用户通过第三方软件调用Google Open API操作用户的资源时,就需要用户对第三方软件授权;通过Google OpenID服务可以打通Google与其他支持OpenID服务网站之间的用户体系。现在假如有另外一个网站,也想开放自己的Open API服务,但是又不想实现OAuth服务(毕竟实现OAUTH服务还是需要一些成本的),那该怎么办?它可不可以使用Google提供的OAuth服务,授权认证交给Google来处理?可以!但是OAuth授权也是基于用户登录来实现的,Google OAuth用户体系只是Google的用户体系,那又怎么办了?OpenID!对,将网站的用户体系与Google用户体系打通,并且使用Google OAuth服务来实现授权,即Google提出的OpenID + OAUTH的解决方案。

 

一、 OAUTH与OpenID

前面两篇文章对OAUTH与OpenID均做过介绍,且Google均提供了这两种服务,在此我们先简要的回顾这两种服务,具体介绍请参见相关文章。

OAUTH是一种开放的,基于用户登录的授权认证方式。如当用户使用第三方软件调用Google Open API去操作自己的Google服务资源时,用户就要先对该软件授权。授权过程中,第三方软件会引导用户登录Google,进行用户鉴权,用户通过Google身份鉴权后才能对第三方软件授权。显然,Google OAUTH只能对Google用户进行鉴权,其他用户体系的用户不能直接鉴权。

OpenID是一种开放的,去用户中心的,用于打通各网站之间的用户体系的服务。在支持OpenID的网站间,你可以使用任何一个网站的帐号或者Open ID去登录任何一个网站。OpenID提供了类似单点登录的用户体验,并且用户无需在各个网站上注册就可以使用该网站的资源,将用户从繁重的帐号注册与管理工作中解脱出来。当用户使用OpenID登录没注册的网站过程中,网站会引导用户登录OP(用户OpenID注册的网站),请求OP对用户身份鉴权,用户通过OP鉴权,网站才会容许用户登录。

若将OpenID与Google OAUTH结合,OpenID将第三方网站的用户体系与Google用户体系打通后,第三方网站便可使用Google OAUTH服务,对自己的用户进行授权!交互示意图如下图所示:

 

二、 Google OAUTH + OpenID解决方案

Google提出了OpenID + OAUTH的解决方案,将两者揉合在一起,具体流程如下图所示:

 

 

1. Web应用请求用户登录;

2. 用户选择使用Google OpenID进行登录;

3. Web应用请求发现Google认证服务URL;

4. Google向Web应用返回XRDS信息,其中包含Google认证服务URL;

5. Web应用请求用户登录Google服务,通过请求用户授权;

6. Google引导用户登录;

7. 用户输入用户名密码进行登录,同时确认是否对第三方软件授权;

8. Google认证中心返回用户ID与授权的Request Token给Web应用;

9. 用户可以访问受保护的资源,同时可以继续第七部中Oauth认证余下的环节;

 

从上面的流程第五步可以看出,Google解决方案中,将OAUTH与OpenID的登录操作合并在一起、并且在登录的同时向Google发送Oauth请求,请求用户授权。这样一来,在第五步中,用户登录Google(OpenID中Google对用户鉴权),同时请求对用户授权(OAUTH中对用户授权,同时无需再次登陆,因为前面OpenID已经登录过了)。

 

三、Google OAUTH+OpenID Demo

Google提供了OAUTH + OpenID的DEMO,Demo演示地址如下:http://googlecodesamples.com/hybrid/

 

刚开始,用户既没OpenID登录也没OAUTH授权,如下图所示:

 

接着,点击上图中login按钮请求以Google提供的OpenID登录,如下图所示:

 

输入用户名与密码登录后,Google提醒您即将登陆到外部网站,外部网站申请对您的资源进行授权,您是否同意,如下图所示:

 

点击继续登录后,登录成功,并且返回授权的Token,如下图所示:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 PHP 代码示例,演示如何使用 Google OAuthOpenID Connect 实现登录共享: ```php // 引入 Google API 客户端库 require_once 'vendor/autoload.php'; // 初始化 Google API 客户端库 $client = new Google_Client(); $client->setAuthConfig('path/to/client_secret.json'); $client->addScope('openid email profile'); // 处理登录请求 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])) { // 构建登录 URL $client->setState($_POST['redirect_url']); $authUrl = $client->createAuthUrl(); // 重定向到 Google 登录页面 header('Location: ' . filter_var($authUrl, FILTER_SANITIZE_URL)); exit; } // 处理回调请求 if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['code'])) { // 从 Google 获取访问令牌 $client->fetchAccessTokenWithAuthCode($_GET['code']); // 获取用户信息 $idToken = $client->verifyIdToken(); $userInfo = $client->verifyIdToken()->getClaims(); // 处理用户信息并显示欢迎页面 // ... } ``` 此代码片段假定您已经通过 Composer 安装了 Google API 客户端库,并已经创建了一个 Google Cloud Platform 项目并启用了相关的 API。在代码中,您需要将 `path/to/client_secret.json` 替换为您的 Google API 客户端密钥的路径。您还需要根据您的应用程序需求调整所需的作用域。在处理回调请求时,您可以使用 `$idToken` 和 `$userInfo` 变量来获取用户的唯一标识符和其他信息,以便进行登录共享和其他操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值