java实现三方登陆:微信登陆功能的实现

        为避免繁琐的注册登陆,一般的大平台都会实现三方登陆的功能,增强用户的粘性。来让我 先看看功能的实现前需要的准备工作吧!

        首先在实现功能前我们需要了解一下OAuth协议即三方登陆协议,OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。OAuth在"客户端"与"服务提供商"之间,设置了一个授权层,"客户端"不能直接登录"服务提供商",只能登录授权层,以此将用户与客户端区分开来。"客户端"登录授权层使用的是令牌(token),与用户的密码不同。用户可以在登录的时候,指定令牌的权限范围和有效期。  

                                                           微信确认授权流程图

 如微信官方所提供的流程示意图,我们只需按照步骤将其实现即可。

        站在用户的角度,首先我们需要给用户提供一个按钮或a标签,点击触发第三方应用向微信发出的【第一个请求】:获取code    https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect  请求的模板在官方网站可以查询。我们需要替换的是:appid:填写自己的appid和redirect_uri:即重定向的地址,其他按官方默认填写或其他需求。请求成功之后,微信会返回一个二维码页面,即用户授权页面,用户扫码授权之后,微信端确认,拉起第三方应用或重定向到第三方并携带授权码code。

        http:/******.html?code=asdfa*******asdfadf    微信端回调 

        从重定向的地址栏可以获取到code,前端发请求携带code到业务层,业务层通过code向微信发送【第二个请求】:通过code获取access_token  

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

将请求中的appid,secret(应用密钥),传入的code进行提换替换,请求成功后会返回结果:
             

类型为字符串类型,可以将其转为json对象类型(需要fastjson支持),从而可以获取access_token和openid等字段,数据库后台需要一个专门存储微信登录信息的表,openid为表字段标识信息。

        获取到access_token和openid后即可以正式开始业务的相关操作,首先需要判断扫码用户是否为第一扫码登录,通过openid进行查询验证,若返回存在登录信息,即可直接免密登录,若不存在登录信息,即表示用户第一次扫码登录,需跳转到绑定页面,让用户进行绑定操作,绑定成功后再扫码登录。

        微信绑定基本流程:后端返回openid和access_token到前端页面,跳转页面并将openid和access_token在地址栏拼接携带为参数,利用钩子函数获取参数openid和access_token,发送请求到后台参数为:openid和access_token以及用户提供绑定的信息(手机号等)。后台先进行参数校验,信息判断等基本操作,无误后使用openid和access_token向微信发送【第三个请求】:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

即可返回基本的用户信息资料,将对应信息设置到数据中进行保存记录即可。

         登录成功后,将用户基本信息设置到redis中并设置时效,设置key=token,value=用户登录信息,并将token及用户信息(敏感信息过滤)以Map的形式返回到页面端,利用localStorage进行保存,同时完善配置前置拦截器(每次请求都携带token),后台拦截器,前端拦截器(前端拦截与放行判断)及后端拦截器(后端拦截及放行判断)等基本配置即可。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值