1、OAuth的简述
OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的。
2、OAuth的原理
第一步:用户访问第三方网站,比如:就是你需要使用微信进行登录的网站;
第二步:你点击微信登录后,第三方网站将会连接并进行请求,比如:你点击登录后,第三方网站会跳转到微信平台,提示你进行登录;
第三步:你要进行授权第三方网站对你的信息访问的一个权限,比如:当微信登录成功后,微信会提示你,是否授权第三方Web访问你的用户基本信息或其他的资源信息,这时你点击授权即可;
第四步:授权后,第三方Web即可访问你刚才授权的资源信息,比如:你的微信基本信息-头像、昵称、性别等。
上述为原理,可能你还有疑惑,和标题不符,下面是OAuth2.0的认证流程:
我们可以将认证分为以下三个步骤:
第一步:得到授权码code
第二步:获取access token和openid
第三步:获取用户信息
我们下面以微信的授权为例:
第一步:用户同意授权,获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
打开上述url后会在微信上弹出授权框,确认授权后,会自动跳转回调的url就是上述链接中填写的redirect_uri,并将code和state传入
第二步:通过code换取网页授权access_token
根据第一步拿到的code我们去获取token和openid
上述所获取token和基本的调用接口的token不一样,不是同一个token,这里获取的token只能获取用户的基本信息。
这里引申一个概念UnionID:
1、请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
2、UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。
相同的微信用户授权给公众号,网站应用和移动应用所获取的openid是不一样的,一个用户的不同应用的关联就是通过unionid,只要是一个用户,不管他是授权给什么应用,那么他们的unionid是一样的,但是正如上面所说,在此基础必须要有个前提,那就是授权给不同应用的这些应用必须要在第三方平台下的应用,只有在第三方平台下的应用才能如上所说拥有相同的unionid。
第三步:拉取用户信息(需scope为 snsapi_userinfo)
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
到此整个授权认证的流程结束,最终获取用户的信息,不需要用户的密码和账户也可以获得信息。
若有问题请咨询QQ:1147726728