ThefFirsttThelLast
彭率
2019-07-30 09:27
采纳率: 90%
浏览 1.2k
已采纳

oauth2之微信授权登录

问题(以微信授权登录为例)
1.为什么先获取code,再获取token,而不是直接获取token?
2.初次绑定的授权页是必要的吗?为什么不默认用户同意授权?
3.微信是根据什么生成open_id的?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • ThefFirsttThelLast
    彭率 2019-08-07 15:04
    已采纳

    //open_id与code关联
    1.H5向App发起获取Code的JS请求
    $(function(){
    $('body').on('click','.onClick_btn',function(){
    //获取操作系统信息
    var u = navigator.userAgent, app = navigator.appVersion;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;//Android端
    var isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/);//iOS端

            if (isAndroid) { //判断是否为Android操作系统
                //请求获取code,参数  用户注册应用得到的client_id  用户自定义的跳转地址
                test.getCode('client_id','redirect_uri');//getCode为js与app约定的交互方法
            }
            else if (isIOS) {//判断是否为iOS操作系统
                //请求获取code
                window.webkit.messageHandlers.getCode.postMessage({client_id:'client_id',redirect_uri:'redirect_uri'});//getCode为js与app约定的交互方法
            }else{ //其它操作系统,无需任何处理
            }
        })
    
    });
    

    2.App端得到JS参数,携带JS参数、app端保存的用户信息(app端请求不会暴露信息给第三方)请求服务器端获取code;
    3.App将请求得到的code和redirect_uri返回给H5
    4.H5根据得到的App提供的值做处理
    function redirect(redirect_uri,code){//redirect方法为app与h5约定
    //处理移动端返回redirect_uri、code
    //自定义操作(当前为重定向,第三方也可进行其他操作)
    window.location.href = redirect_uri
    }

    点赞 评论
  • madmk
    madmk 2019-07-30 16:57

    1、
    其一:获取code是客户端做的事情,如果将获取token的步骤交由客户端去做,那么证明任何机器 都可以获取 而token应该是安全存放的,所以不符合要求
    而服务端根据code获取token 微信则需要验证secret和请求发出的地址,这样就可以证明是安全的。
    其二:oauth2规定的必须这么做
    2、是 授权页面是微信提供的,只需要将授权页面回跳时的code接住即可,
    为什么不默认,因为微信隐私条款中规定要保护用户信息,用户不显式同意一下的话,你就可以拿到用户信息证明 微信侵犯了个人隐私权
    3、根据你的appid和用户在微信的id生成的 也就是open_id在不同程序中是不同的并且在相同程序在是唯一的

    点赞 评论

相关推荐