Google OAUTH + OpenID 给第三方授权
OPENID操作过程:
假如自己有网站www.hanborq.com,想要google的用户也能登录,则要做如下操作:
1. 把自己的网站注册到google:https://www.google.com/accounts/ManageDomains
2. 在google上管理自己的网站:https://www.google.com/accounts/ManageDomains ,其中Target URL path prefix:表示的是鉴权完成后将会返回的地址及token。
3. 测试:点击测试时将会跳转到这个地址继续执行:http://www.hanborq.com/authsub?token=1%2FK_dvV72aicVeZ6FUSK0s6TLbfayj0t4srgoOyG4BeWA
OAUTH2操作过程:
文档:http://code.google.com/intl/zh-CN/apis/accounts/docs/OAuth2.html (含web javascript访问方式、web服务器访问方式,应用程序访问方式,下面置说明了web方式过程):
1. 注册到google:https://code.google.com/apis/console,选择API Access,需要翻墙。
Client ID:
|
133501856298.apps.googleusercontent.com
|
Client secret:
|
X-rMJocMGJ3DDNbMgS-iFO9X
|
Redirect URIs:
|
http://www.hanborq.com/oauth2callback
|
JavaScript origins:
|
http://www.hanborq.com
|
2. 授权访问方法(注:client_id和redirect_uri跟上面注册的对应,scope对应某种API,需要看文档):
3. 登录同意之后返回结果:
注意到返回了access_token和超时值。
4. 最后使用这个返回的token:
这里前缀为第一次请求里面的scope,后面带了oauth_token为上面的access_token。
如果要得到用户名、邮箱地址,则使用下面链接,返回的XML包含<id>为邮箱,<title>里面含有用户名:
scope列表:
Google API
|
Service name
|
Google Analytics Data API
|
https://www.google.com/analytics/feeds/
|
Google Base Data API
|
http://www.google.com/base/feeds/
|
Google Sites Data API
|
http(s)://sites.google.com/feeds/
|
Blogger Data API
|
http://www.blogger.com/feeds/
|
Book Search Data API
|
http://www.google.com/books/feeds/
|
Calendar Data API
|
http(s)://www.google.com/calendar/feeds/
|
Contacts Data API
|
http(s)://www.google.com/m8/feeds/
|
Documents List Data API
|
http(s)://docs.google.com/feeds/
|
Finance Data API
|
http://finance.google.com/finance/feeds/
|
Gmail Atom feed
|
https://mail.google.com/mail/feed/atom/
|
Health Data API
|
https://www.google.com/health/feeds/
https://www.google.com/h9/feeds/ (H9 sandbox)
|
Maps Data API
|
http://maps.google.com/maps/feeds/
|
Picasa Web Albums Data API
|
http://picasaweb.google.com/data/
|
Sidewiki Data API
|
http://www.google.com/sidewiki/feeds/
|
Spreadsheets Data API
|
http(s)://spreadsheets.google.com/feeds/
|
Webmaster Tools API
|
http://www.google.com/webmasters/tools/feeds/
|
YouTube Data API
|
得到gtalk用户名、头像 www-opensocial.googleusercontent.com/api/people/@me (http头里面必须包含Authorization: OAuth <token>,oauth_token就不用了)
Google OAUTH + OpenID 给第三方授权
可以通过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,如下图所示: