第三方登陆--接入谷歌和FaceBook

一、第三方登陆流程

第三方登陆--接入谷歌和FaceBook_第1张图片

 一、用户点击登录,前端会调用第三方的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_credentials

client_id:此处使用的是Facebook提供的appId

client_secretFacebook提供的秘钥

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": "[email protected]",
 "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"
}

你可能感兴趣的:(项目收获,java)