一、第三方登陆流程
一、用户点击登录,前端会调用第三方的SDK,获取到对应的数据,一般会有token、userId。
二、前端拿到这些信息之后,回调自己后端服务端的接口,进行token校验。主要目的是后端得防止他人使用恶意手段,别的平台,或者是同一个平台不同账号的授权token进行登录。
三、一般拿到前端传入的token,去调用第三方提供的token校验接口,会返回对应的信息。一般都会返回userId,这个时候可以拿前端传入的userId做进一步的比较,如果token校验,第三方返回true,且userId相等。说明第三方已经授权。
四、到了这一步,就进入自己的业务流程了,比如:记录用户第三方解析出来得信息,如:邮箱之类的。之后后端在生成自己方的token,返回给前端使用即可。
二、FaceBook登录
一、前端拿到facebook返回的token后,调用后端的登录接口,后端进行token的校验,
调用FaceBook接口: 1、获取accessToke https://graph.facebook.com/oauth/access_token?client_id= &client_secret= &grant_type=client_credentialsclient_id:此处使用的是Facebook提供的appId
client_secret:Facebook提供的秘钥
grant_type:client_credentials 固定参数,写死
这步目的是为了获取access_token,用于token校验
2、校验前端传来的token:这里有两种方式
https://graph.facebook.com/debug_token?access_token= &input_token=
第一种:
access_token:放入1中获取到的access_token。
input_token:放入前端传入的token,用于校验正确性
第二种:
access_token:是由appId和appSecret拼接而成,格为
{appId}%7C{appSecret}
,%7C
就是|
urlencode之后的编码。input_token:放入前端传入的token,用于校验正确性
二、最后会得到如下结果,有些可能有些差别,但是不管有多大差别,红色部分是肯定有的
{
"data": {
"app_id": "746492673568696",
"type": "USER",
"application": "shop",
"data_access_expires_at": 1594896505,
"expires_at": 1587124800,
"is_valid": true, 注意:第三方返回的token的正确信标志
"scopes": [
"user_birthday",
"user_likes",
"user_photos",
"user_friends",
"user_status",
"email",
"public_profile"
],
"user_id": "110029804771531"
}
}
三、获取Facebook用户邮箱
如果在二步骤中解析出来的信息没有邮箱,我们可以通过下面的接口拿到对应的Facebook邮箱。
获取Facebook邮箱信息: https://graph.facebook.com/userId?fields=email&access_token=userId:此处直接放入二步骤中解析到的userId
fields:此处写死email这个单词
access_token:放入前端传入的token
最后可得到用户注册第三方的邮箱
如果你还需要获取其他信息,可参考官方文档:https://developers.facebook.com/docs/graph-api/overview
三、谷歌登录
一、前端拿到谷歌token后,传入对应的后端接口。进行token校验。
直接调用下面接口进行token校验: https://www.googleapis.com/oauth2/v3/tokeninfo?id_token="
id_token:此处为前端传入token
二、以下是返回参数,可能部分有些不同,但是红色部分是一定有的
{// These six fields are included in all Google ID Tokens."iss": "https://accounts.google.com","sub": "110169484474386276334", 第三方id"azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com","aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com","iat": "1433978353","exp": "1433981953",// These seven fields are only included when the user has granted the "profile" and// "email" OAuth scopes to the application."email": "testuser@gmail.com","email_verified": "true", 验证成功标志"name" : "Test User","picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg","given_name": "Test","family_name": "User","locale": "en" }