微信授权登录()


作者: jackyBu 
链接:http://www.imooc.com/article/17696
来源:慕课网

 

 

 

 

来简单说明oauth2.0授权登陆流程:

什么是oatuh2.0协议:

  • OAuth2.0(开放授权)是一个开放标准。
    没啥好解释的,就是一个标准

  • 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息。
    蕴含很多信息哦!
    这句话提到了三个角色:第三方网站/用户/服务商
    这句话是站在服务商的角度进行描述的。
    服务商:以微信为例子,那么服务商就是微信[服务器]或腾讯
    用户 : 就是你,你的相关信息(例如用户名/密码/性别/ 省份等等等等)都是存放在服务商的服务器中。注意:你不是第三方(例如简书)的用户,而是微信的用户(因为你是注册在微信中,而不是简书中)
    第三方网站 : 这里指的就是简书[服务器]

  • 而这种授权无需将用户提供用户名和密码提供给该第三方网站。
    这句话的意思很明显,就是简书服务器是没法拿到你在微信服务器中的用户名和密码的,但是的确能够让你登陆简书服务器

  • 既然第三方(简书)无法拿到你的用户名和密码,那肯定是由服务商(微信)来进行验证,那么第三方肯定要和服务商有一种机制来进行辨识:
    在认证过程之前,第三方(简书)需要先向服务商(微信)申请第三方(简书)服务的唯一标识
    因此第三方(简书)填写本公司相关信息,提供本公司账号,域名等信息,并且花三百块钱给服务商(腾讯)进行审核。服务商腾讯收到钱,并且审核通过后,会给第三方(简书)两个编号:AppID和appSecret(及其重要,不能泄露)。通过这两个编号,就能确认唯一性了。当然过程是很复杂的。
  •  

 

图片描述

 

 

 

 

 

  • 第三方[服务器]和服务商[服务器]之间的通信:
    既然第三方(简书)用通过服务商(微信)来验证用户(你)身份的合法性,那么肯定涉及到:一旦服务商(微信)确认用户(你)的合法身份后,如何将信息传递给第三方(简书)
    很简单,通过第三方(简书服务器)提供的回调URL,服务商(微信服务器)将相关数据以参数形式写入到第三方(简书服务器)提供的回调URL,第三方(简书服务器)解析服务商(微信服务器)发过来的信息抽取出来就OK了!
    那在微信公众号的申请中,有要求第三方(简书)提供回调地址(接口权限--->网页服务--->网页授权获取用户基本信息

 

 

 



图片描述

oauth2.0授权流程:

图片描述

其中:
2--7步骤是通过简书调用:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
这个API进行的,具体参数请参见文档说明链接   http://qydev.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5

8-9步骤是通过简书调用:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
这个API进行的,具体参数请参见文档说明

步骤10以后,是通过accesstoken以及openid等从微信获取相关信息了

由于微信的开发需要审批,独立的域名(不能使用localhost),并且要求是80端口(http)或443端口(https),这独立域名以及这两个端口需要工信部审批后才可使用,因此我这里目前没有这种开发环境,但是我可以提供一段代码,以前分享在群里面,用于进行微信oauth2.0授权,我以前可以获取正确的结果,目前应该也可以。
 

示例代码

protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {

String backUrl = "http://chenjiale.ngrok.xiaomiqiu.cn/WxAuth/wxCallBack";//回调url

     String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+AuthUtil.APPID + 

     "&redirect_uri="+backUrl + 

     "&response_type=code" + "&scope=snsapi_userinfo" +             

    "&state=STATE#wechat_redirect"; 

    resp.sendRedirect(url);//页面将跳转至redirect_uri?code=CODE&state=STATE,企业可根据code参数获得员工的userid

}



protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

         String code = req.getParameter("code");//获取code

         String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+AuthUtil.APPID

          + "&secret="+AuthUtil.APPSECRET

          + "&code="+code

          + "&grant_type=authorization_code";

         JSONObject jsonObject = AuthUtil.doGetJson(url);

         String openid = jsonObject.getString("openid");

         String token = jsonObject.getString("access_token");

         String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+token

        + "&openid="+openid + "&lang=zh_CN";

      JSONObject userInfo = AuthUtil.doGetJson(infoUrl);

      String unionid = userInfo.getString("openid");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值