PeterYu
PeterYu
  • 发布:2017-08-03 17:28
  • 更新:2020-11-21 10:45
  • 阅读:3969

微信OAuth2的scope问题和appsecret安全问题

分类:HTML5+

(1)由于微信OAuth2中使用snsapi_userinfo会在我司自己用HBuilder开发的APP内弹出微信授权页面。我们技术部这边测试了snsapi_base的scope却返回“Scope参数错误或没有Scope权限”。因为snsapi_base是静默调用微信服务器;会改善用户体验。是否可以开放这个scope?谢谢。

(2)不管在manifest.json文件里面配置微信的appsecret还是在plus.oauth对象里面调用login方法的是传入包括appsecret的json格式数据,都是将appsecret暴露在前端。使用修改apk文件后缀的方法就直接解压了安卓包。是否可以有更加安全的方法不保存appsecret在前端?例如当我们传入redirect_uri参数的时候可以正常跳回到我司自己的服务器上并成功得到code和state参数。这样我司就可以直接在我司自己的服务器使用code、state、和appsecret进行后端操作,包括写openid等。这样就成功在APP内利用微信的OAuth2进行权限认证了。希望HBuilder能够认真对待这个问题;让HBuilder越做越好。PS:强调将appsecret保留在后端是微信官网强调的:
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN

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

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

2017-08-03 17:28 负责人:无 分享
已邀请:
老向

老向

今天要用到微信登陆!才发现现在的微信登陆认证是个摆设!没有半点安全性可言!

不明白为什么要在用户端解码微信授权的请求CODE,
用户端只要appid,拿到code就完事了!
为什么要把appsecret放在用户端?还把code解码了!这是个什么神逻辑?

正常的流程是用户端只要保存appid,授权拿到微信授权code。
剩下的事就是服务器端的干活。

  • MartinYip

    这么重要的安全问题都不重视,都二年多了,难道hbuilder做不下去了?


    2019-07-30 19:31

OnlyFree何

OnlyFree何

我也遇到这样的问题,除了appsecret的安全问题,还有认证后仍是需要登录app自己的系统的,但又不能让用户输入密码或短信验证,我不可能仅凭一个前端传来的openid就让登录了,如果能在app后端服务器上通过code获取到openid再登录自己系统才足够安全。

PeterYu

PeterYu (作者)

如果用redirect_uri参数不方便微信服务器直接转跳我司自己的服务器;也可以在state里面设置。但是用state参数传递url地址前需要先base64_encoded;然后在需要使用的时候需要先base64_decoded。

PeterYu

PeterYu (作者)

可能2个小时前说不够详细。就是让使用HBuilder的开发者在HBuilder官网中建立自己的账号,然后将微信appsecret存放在HBuilder服务器上面。这样HBuilder服务器得到微信服务器openid等用户信息以后HBuilder可以从base64decoded的state参数将这些信息从服务器端curl post到state指定的服务器地址上面。这样就没有可能从前端得到任何敏感信息。
大部分开发者既然使用了HBuilder,就没有信任不信任HBuilder的问题。将appsecret和用户openid等信息通过HBuilder服务器传递到开发者公司自有服务器,对于大部分开发者还是一个比较愿意的方式。总比将appsecret直接打包在包括manifest.json的apk压缩包强吧。哪怕用C++编程将appsecret加密并在加载APP或者需要的时候解密还原真实appsecret值,也是一种治标不治本的补救方法。
HBuilder至少可以提供多几个plus.oauth对象方法,让开发者可以有这样和那样的选择吧。作为一个第三方,提供选择,吸引更多开发者是不错的想法。
谢谢你的时间。

5***@qq.com

5***@qq.com

同问,官方就没有人来回答这个疑问的吗?

uniapper

uniapper - abc

在plus.oauth对象里面调用login方法的是传入包括appsecret的json格式数据

这个是不是可以通过如下方法来增强安全性:
将appsecret等存在服务器端。在用到时通过https访问服务器api获取?

移动达人

移动达人

关注

4***@qq.com

4***@qq.com

关注,遇到同样的问题,现在这样的微信登录方式根本不可信任,且appsecret存在客户端,这无论如何都不行吧,这种微信登录方式形同虚设

n***@163.com

n***@163.com

同问呀,login可以输入appid和appsecret但是无效呀

  • 移动达人

    确实,按官方文档演示代码,传入服务器端返回的正确appid和appsecret,但是无效。


    2017-12-07 21:20

3***@qq.com

3***@qq.com

关注,目前正在接入这部分,官方给个回答吧

e***@163.com

e***@163.com

持续关注中,希望官方重视这个问题。 万一出现 hbuidler 制作的app 被大规模反编译,泄露大量 appsecret,对这个框架的打击会是致命性的。

3***@qq.com

3***@qq.com

请问有尝试过开发服务端获取相应第三方个人信息资料的吗

MartinYip

MartinYip - 创业中。。。

将app key放客户端,这显然不是oauth2的安全规范, 这么多人遇到这个安全问题,官方也不解决!不知官方把开发者当什么了?

老向

老向

/**

  • @param {Object} id (授权服务)
  • @param {Object} ex (扩展参数,暂时不用)
    */
    function authAction(id,ex) {
    //console.log(id);
    show_box(2);
    plus.nativeUI.showWaiting( "正在获取授权..." );
    var s = null;
    if (!id || !(s = authname[id])) {
    console.log("无效的授权服务!");
    return;
    }
    //console.log(JSON.stringify(s));
    s.authorize(function(e){
    userauinfo=e;
    console.log("授权成功:"+JSON.stringify(e));
    }, function(e){
    console.log("授权失败:"+JSON.stringify(e));
    }, {scope:'snsapi_userinfo',state:'authorize test',appid:'wx6788faxxxxxxxxcsd'});
    plus.nativeUI.closeWaiting();
    };

可以直接取Code了的!用过好久了!

DCloud_heavensoft

DCloud_heavensoft

Appsecret不推荐放到前端,这文章已经过期好久,勿挖坟

该问题目前已经被锁定, 无法添加新回复