(lehu6.vip官网直营平台) Restful api认证机制的问题

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

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

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

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

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

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

如果是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,估计工程量比前者大多了。

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

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

你说的让用户带着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的安全性做高

使用oauth认证机制

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注