素材牛VIP会员
Restful api认证机制的问题
 mi***02  分类:Node.js  人气:923  回帖:9  发布于6年前 收藏

目前是采用json web token这种机制,验证合法用户后返回一个toekn,然后该用户每次请求都带上这个token,最后服务器验证token是否合法。但是这样有一个弊端:token很容易让别人获取到,这样就能访问任意的api,不安全。

这需要用上https来保证安全?想请教一下大家有哪些更好更安全的认证机制。

讨论这个帖子(9)垃圾回帖将一律封号处理……

Lv6 码匠
黄***得 其它 6年前#1

可以用上 HTTPS. 对于 token 验证的话, 可以增加一些限制, 比如 IP 范围. 用上了 HTTPS 还是有可能被劫持, 但是概率比较小, 我觉得是不用太担心的, 除非是什么不得了的网站. 用户名密码验证的话, 可以采用时间戳/验证码 + hash, 但同上, 如果用的 HTTPS 并不是很必要.

Lv5 码农
龙***爸 Linux系统工程师 6年前#2

我现在也是使用的你这种方法。现在不考虑改变验证方法,等以后需要的时候再去修改验证方法。

这里讲了很多认证方法,希望能够帮助你。如何实现用户认证系统?

Lv6 码匠
阿***斤 CEO 6年前#3

如果是WebAPP的话,最好全程https,参照OAuth2.0,这样开发比较简单。token是有生命周期,可以有IP限制(IP跟获取token时候的IP不一致就拒绝)
如果客户端是C++、安卓之类的也可以用OAuth1.0的老办法,每一次请求都要附上secret,secret是HMAC_SHA1("神秘代码&param1="+param1+"&param2="+param2+"&...",access_token+"&&"+"app_token")
这样的例子比较多,谷歌一下太多了,你搭个OAuth1.0的服务器就好了,不用买证书。如果自己写SDK,估计工程量比前者大多了。

Lv2 入门
言***- 页面重构设计 6年前#4

1.开放平台?开放平台一搬用oauth验证机制。
2.一般的接口验证的话,可以发放一个secretkey给用户(secretkey可以是通过oauth验证方式发放,也可以手动发放),然后请求参数加一个sign参数,sign等于hash(secretkey+paramsStr+secretkey),服务器验证sign是否合法,这种方式不需要传输secretkey。

Lv6 码匠
飞***e 产品经理 6年前#5

你说的让用户带着token来请求资源,只是authorization,你还需要authentication。在用户登录之后,你可以给这个用户生成一个id token(这个也可以是JWT),然后把这个id token string当成cookie返回给客户端让他们存着,这样每次用户带着一个access token来请求资源的时候,把access token和request header里的这个id cookie对照看是不是属于同一个用户。这个方案至少解决了万一access token被别人拿到,别人还需要一个id cookie才能获取资源。但是id cookie也有可能被别人盗取。为了更好的安全性,这时候就要上HTTPS了,然后把cookie的安全性做高

Lv4 码徒
想***儿 技术总监 6年前#6

使用oauth认证机制

Lv5 码农
zh***23 PHP开发工程师 6年前#7

可以授权后根据token来做一个简单的签名和验签

Lv6 码匠
24***23 软件测试工程师 6年前#8

http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
FYI

Lv1 新人
飘***子 JS工程师 6年前#9

楼上的几位回答都很好,现在采用OAuth2.0授权了,而OAuth2.0都是建议使用https协议加密数据的。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取