什么是OAuth?
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
微信授权步骤
微信公众平台OAuth2.0授权详细步骤如下:
- 用户关注微信公众账号。
- 微信公众账号提供用户请求授权页面URL。
- 用户点击授权页面URL,将向服务器发起请求
- 服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无此步骤)
- 用户同意(scope为snsapi_base时无此步骤)
- 服务器将CODE通过回调传给微信公众账号
- 微信公众账号获得CODE
- 微信公众账号通过CODE向服务器请求Access Token
- 服务器返回Access Token(网页授权接口调用凭证)和OpenID(用户的唯一标识)给微信公众账号
- 微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)
- 服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)
操作实例
在开发者中心-开发者ID中,可以找到AppId和AppSecret。
请求授权页面的URL
var url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appId + '&redirect_uri=' + redirect_uri + '&response_type=code&scope=snsapi_base&state=' + location + '#wechat_redirect';
- appid 公众号的唯一标识
- redirect_uri 授权后重定向的回调链接地址
- response_type 返回类型,请填写'code'
- scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
- state(可选) 重定向后会带上state参数,开发者可以填写任意参数值
- #wechat_redirect(可选) 直接在微信打开链接,可以不填此参数。做页面302重定向时候,必须带此参数
即点击链接后,发起OAuth2授权请求,提交公众平台的appid,重定向链接response_type,当前链接state
授权成功后,跳转到重定向链接并get传参获取code和此前自定义的state
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
- appid 公众号的唯一标识
- secret 公众号的appsecret
- code 填写第一步获取的code参数
- grant_type 填写为authorization_code
调用api即可获取access_token(如为snsapi_userinfo)和openid,再调用api获取用户信息
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
注意snsapi_base时只到openid即截止,无法获得access_token及用户信息(昵称性别所在地头像)等