微信登录详解

几种常见登录方式:https://www.cnblogs.com/itlihao/p/14846026.html

1. 什么是OAuth2

OAuth:是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。

OAuth2.0:是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。

有这样一种场景,一个用户(假设是QQ),希望让一个第三方的应用(比如说某个论坛),能够得到关于自身的一些信息(唯一用户标识,比如说QQ号,用户个人信息,比如说是一些基础资料,昵称和头像等)。

但是在获得这些资料的同时,却也不能提供用户名和密码之类的验证信息。

比如说用户不可能将自身的用户名和密码给第三方让第三方到用户中心之类的地方去获取信息。要达到这样的结果肯定有许多的实现方式。而Oatuh2就是实现上述目标的一种规范,或者说是具体实现的指导方案。

1.1 OAuth2应用场景

第三方应用授权登录:在APP或者网页接入一些第三方应用时,时长会需要用户登录另一个合作平台,比如QQ,微博,微信的授权登录。





2. 微信登录

微信开放平台:https://open.weixin.qq.com/

2.1 准备工作

网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。

在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并得到开发者资质认证并拥有一个已审核通过的网站应用并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

我们对接阿里的什么文件上传,短信发送等都是基于SDK的方式。

微信登录是基于函数回调的方式。

2.2 授权流程说明

微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站。

在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。

微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

2.2.1 详细说明->步骤一->请求Code

第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:

https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。

urlencode:是一个函数,可将字符串以URL编码,用于编码处理。
用法:

URLEncoder.encode("要转码的内容");

2.2.2 详细说明->步骤二->通过code获取access_token

前言:我们在2.2.1 步骤实现之后,访问该链接,会出现一个二维码供我们扫描。当我们扫描之后,会重定向到我们设定的一个地址,会在该地址后面带上code=CODE值&state=STATE值。我们就能得到code值和state值。

通过第一步得到的code去获取access_token【返回的是JSON,需要从JSON中得到access_token】

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

1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);
2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;
3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。

建议将secret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。

2.2.3 详细说明->步骤三->通过access_token调用接口【获取用户的部分微信信息】

前言:我们在2.2.2 步骤实现之后,访问该链接,会返回一个JSON字符串给我们,其中有access_tokenopenid。如果你想去获取用户相关信息,就需要用到这2个玩意。

获取access_token后,进行接口调用,有以下前提:

1. access_token有效且未超时。
2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。

比如:获取用户个人信息

获取用户个人信息(UnionID机制)
接口说明:

此接口用于获取用户个人信息。

开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。

换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。

原文地址:https://www.cnblogs.com/itlihao/p/15223011.html