第三方登录的原理都是一样的。
首先需要在第三方平台上为自己创建一个应用,该应用会拥有ID、密码等属性
然后客户从我们的项目上通过第三方登录时 会携带我们的应用的ID跳转到第三方平台进行登录与授权,之后在第三方平台上会生成一个token ,并将该token返回到我们的平台,通过该token,我们就可以再次去请求第三方平台获取用户的基本信息 来达到登录的功能。
一、Linked oAuth
使用LinkedoAuth的第一步需要在http://www.linkedin.com/注册一个linked帐号
然后使用注册好的帐号登录
然后打开http://developer.linkedin.com/选择导航栏中的Support→ API Keys 进入Applications页面。
在这里可以创建一个Application,填写好信息之后就提交表单,创建成功之后,页面会输出Application的信息,包含最终要的APIKey与Secret Key
此时我们的系统已经可以支持从Linked登录了,登录方式如下:
1、请求https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=h1lfn2m9l45p&state=这里填任意字符串&redirect_uri=http://localhost:8080/
然后会跳转到Linked的登录入口,输入用户名密码后会再跳转到我们通过redirect_uri指定的URL,并在url中携带了一个参数code
2、请求https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code
&code=第一步获取的code
&redirect_uri=http://localhost:8080/
&client_id=h1lfn2m9l45p
&client_secret=XD0MqE4YQYjjcXop
将会得到一个Json类型的Response,该Response里面包含了token
https://api.linkedin.com/v1/people/~?oauth2_access_token=第二步获取到的token |
就能得到一个XML类型的Response,里面包含了该登录用户的信息,包含登录用户的姓名等信息
4、获取用户指定的信息 (前提条件是申请的clientId中设置了获取指定信息的权限)
获取EMIAL:https://api.linkedin.com/v1/people/~/email-address?oauth2_access_token=第二步获取的token
其实第1步与第2步中的参数redirect_url中的参数都应该是一个Servlet的URL,
也就是第2步与第3步都需要在Servlet中解析返回的内容。在第三步如果成功的获取到了用户的信息,就将用户放入session(登录)
二、Gmail oAuth
第一步:登录gmail
第二步:访问https://code.google.com/apis/console#access
第三步:创建一个ClientID
创建好之后就能看到client id、client secret、Emailaddress、RedirectURIs等信息了
之后的方法与LinkedoAuth基本一样。可以参考https://developers.google.com/accounts/docs/OAuth2WebServer
接下来是客户登录
第一步:授权
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&state=任意字符串&redirect_uri=http://localhost:8080&response_type=code&client_id=创建的ClientID&approval_prompt=force
然后会进入google的验证页面,输入用户名和密码,然后确认授权,之后页面将会跳转到redirect_uri指定的URL,并携带参数state与code
第二步:获取tokenId
发送post请求到https://accounts.google.com/o/oauth2/token
请求体如下:
POST /o/oauth2/token HTTP/1.1 Host: accounts.google.com Content-Type: application/x-www-form-urlencoded code=第一步获取到的code client_id=8819981768.apps.googleusercontent.com& client_secret={client_secret}& redirect_uri=https://oauth2-login-demo.appspot.com/code& grant_type=authorization_code然后会得到一个JSON类型的Response,里面包含access_token
第三步:获取客户信息
发送下面的请求就能获取用户信息了
GET /oauth2/v1/userinfo HTTP/1.1 Authorization: 第二步获取的access_token Host: googleapis.com三、facebook oAuth
本地系统无法访问facebook的服务,但是我估计原理和上面的两种都差不多。
未完待续。。