Home >Backend Development >PHP Tutorial >Oauth2.0开发 为什么子要提交access_token或者还有一两个其他固定参数就能识别用户身份?

Oauth2.0开发 为什么子要提交access_token或者还有一两个其他固定参数就能识别用户身份?

WBOY
WBOYOriginal
2016-06-23 13:33:40774browse

小弟最近要开发对APP请求的验证接口(服务端的,不是客户端哦),一直没明白,为什么通过Oauth协议流程获取到access_token之后,接下来的操作(对用户数据的增删改查)都只需要提交一个access_token,或者还有OpenID和APPKey(这些参数的有效期都是比较长,一般几天)就能判断用户的身份进行增删改查操作,小弟不明白,万一这几个参数泄露或被窃取了,那他人(第三方)不就可以通过提交这几个参数修改用户数据了吗?小弟第一次进行类似的开发,求大家指点下,如果能有源代码就更好的,在此先谢过各位~~


回复讨论(解决方案)

这些都是发生在服务器端的交互,如果被窃取了可想你的服务器已经不安全了,不过也没有关系,一个加密的openid对谁来说都没有意义。

我是不明白为什么通过这几个固有的参数就能识别用户身份,后台具体是怎样识别的,我是要开发一个给第三方使用的接口,这步不明白,没法实现

这些都是发生在服务器端的交互,如果被窃取了可想你的服务器已经不安全了,不过也没有关系,一个加密的openid对谁来说都没有意义。


我是不明白为什么通过这几个固有的参数就能识别用户身份,后台具体是怎样识别的,我是要开发一个给第三方使用的接口,这步不明白,没法实现 ,求解,卡住了

openid是用户的唯一凭证同时关联着这个用户的所有数据,后台具体怎么实现?你指是谁的后台?用户在平台上面玩,平台肯定是能获取用户的信息,用户的需求,平台把信息给你,你根据用户的信息和需求进行反馈,给不给第三方提供接口不也是都由你做主吗?

openid是用户的唯一凭证同时关联着这个用户的所有数据,后台具体怎么实现?你指是谁的后台?用户在平台上面玩,平台肯定是能获取用户的信息,用户的需求,平台把信息给你,你根据用户的信息和需求进行反馈,给不给第三方提供接口不也是都由你做主吗?


你没明白我意思,或许是我没有阐述清楚,假设第三方已经拿到用户的访问令牌[access_token]、[OpenID]再加上第三方申请应用时获取到的身份标识[APPKey],现在第三方通过HTTP请求将这三个参数提交到腾讯API接口,腾讯后台程序通过判断这三个参数来验证用户身份,允许当前的增删改查操作。
腾讯后台程序是可以通过OpenID查找到相应的用户,这没错。我没搞懂的是腾讯后台程序怎么验证当前操作的合法性(确定是当前用户本人操作),因为这三个参数是固定不变的(有效期内),比如:A通过一些手段(HTTP监听...)获取到了B提交的这三个参数信息,那岂不是A就能通过提交这三个参数访问、修改B保存在腾讯服务器的信息了。我不是想知道腾讯后台具体是怎么去验证的,我只是想要验证的思路。


openid是用户的唯一凭证同时关联着这个用户的所有数据,后台具体怎么实现?你指是谁的后台?用户在平台上面玩,平台肯定是能获取用户的信息,用户的需求,平台把信息给你,你根据用户的信息和需求进行反馈,给不给第三方提供接口不也是都由你做主吗?


你没明白我意思,或许是我没有阐述清楚,假设第三方已经拿到用户的访问令牌[access_token]、[OpenID]再加上第三方申请应用时获取到的身份标识[APPKey],现在第三方通过HTTP请求将这三个参数提交到腾讯API接口,腾讯后台程序通过判断这三个参数来验证用户身份,允许当前的增删改查操作。
腾讯后台程序是可以通过OpenID查找到相应的用户,这没错。我没搞懂的是腾讯后台程序怎么验证当前操作的合法性(确定是当前用户本人操作),因为这三个参数是固定不变的(有效期内),比如:A通过一些手段(HTTP监听...)获取到了B提交的这三个参数信息,那岂不是A就能通过提交这三个参数访问、修改B保存在腾讯服务器的信息了。我不是想知道腾讯后台具体是怎么去验证的,我只是想要验证的思路。
当用户通过oauth授权给第三方,第三方得到access_token之后,平台就和用户没有直接的关系了,剩下的操作都是服务器通过access_token的权限和平台进行交互。如果说access_token泄露,说明说第三方的服务器已经不安全了。在平台方能做的验证只能确保说,这个操作请求是由access_token授予的第三方应用发出,这种验证可以通过绑定应用的域名,IP,回调地址来实现

在oauth中,你没有办法判定操作是不是由用户本人发出的,只要第三方被授予了access_token,他就可以做任何这个token允许他做的事情,不需要用户再做任何操作,因此,在授予第三方access_token的时候,要将第三方请求的所有权限展示给用户,让用户明白授权之后第三方能做什么操作

安全问题确实是有的,但其实问题不大
1.假如用户那边造成的信息泄露,那其实该用户已经置身危险状态了。骇客根本不用获得这三个值,他完全可以窃取用户的用户名、密码(很多网站是明文传输的),直接修改用户各个网站的数据。这种情况发生用户只能自认倒霉,反正跟你没关系,他不会怪你。漏洞修复好后用户改下自己的密码就安全了。
2.腾讯给三个值就代表应用可以随意做接口允许的事情,所以其实腾讯开放给应用的接口基本没有能修改数据的,主要是获取信息的接口和一些交互用的接口,而且每日还限制了交互次数。能修改QQ密码?能修改QQ昵称? 个人资料也都不能改。这些都不能改,骇客也做不了什么事,所以没什么问题。
3.如果是服务器造成的大规模用户数据泄露,你就自认倒霉吧。肯定停服修bug了,改完了把AppKey再生成一个就安全了,再做些补偿机制什么的...

总之还是能接受的。如果这种机制是有问题的,腾讯早就换别的方式了,也轮不到你来担心。



openid是用户的唯一凭证同时关联着这个用户的所有数据,后台具体怎么实现?你指是谁的后台?用户在平台上面玩,平台肯定是能获取用户的信息,用户的需求,平台把信息给你,你根据用户的信息和需求进行反馈,给不给第三方提供接口不也是都由你做主吗?


你没明白我意思,或许是我没有阐述清楚,假设第三方已经拿到用户的访问令牌[access_token]、[OpenID]再加上第三方申请应用时获取到的身份标识[APPKey],现在第三方通过HTTP请求将这三个参数提交到腾讯API接口,腾讯后台程序通过判断这三个参数来验证用户身份,允许当前的增删改查操作。
腾讯后台程序是可以通过OpenID查找到相应的用户,这没错。我没搞懂的是腾讯后台程序怎么验证当前操作的合法性(确定是当前用户本人操作),因为这三个参数是固定不变的(有效期内),比如:A通过一些手段(HTTP监听...)获取到了B提交的这三个参数信息,那岂不是A就能通过提交这三个参数访问、修改B保存在腾讯服务器的信息了。我不是想知道腾讯后台具体是怎么去验证的,我只是想要验证的思路。
当用户通过oauth授权给第三方,第三方得到access_token之后,平台就和用户没有直接的关系了,剩下的操作都是服务器通过access_token的权限和平台进行交互。如果说access_token泄露,说明说第三方的服务器已经不安全了。在平台方能做的验证只能确保说,这个操作请求是由access_token授予的第三方应用发出,这种验证可以通过绑定应用的域名,IP,回调地址来实现
嗯,谢谢

安全问题确实是有的,但其实问题不大
1.假如用户那边造成的信息泄露,那其实该用户已经置身危险状态了。骇客根本不用获得这三个值,他完全可以窃取用户的用户名、密码(很多网站是明文传输的),直接修改用户各个网站的数据。这种情况发生用户只能自认倒霉,反正跟你没关系,他不会怪你。漏洞修复好后用户改下自己的密码就安全了。
2.腾讯给三个值就代表应用可以随意做接口允许的事情,所以其实腾讯开放给应用的接口基本没有能修改数据的,主要是获取信息的接口和一些交互用的接口,而且每日还限制了交互次数。能修改QQ密码?能修改QQ昵称? 个人资料也都不能改。这些都不能改,骇客也做不了什么事,所以没什么问题。
3.如果是服务器造成的大规模用户数据泄露,你就自认倒霉吧。肯定停服修bug了,改完了把AppKey再生成一个就安全了,再做些补偿机制什么的...

总之还是能接受的。如果这种机制是有问题的,腾讯早就换别的方式了,也轮不到你来担心。


之前粗心了,原来腾讯提供的接口只能获取数据,之前到时没注意。这么说来,却是没有安全方面的担忧,我是要开发一个提供给网站手机端APP请求的接口,手机端能通过这个接口修改用户数据。目前已经有了实现的方法。

能说明下怎么实现的吗?

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn