目前是采用json web token这种机制,验证合法用户后返回一个toekn,然后该用户每次请求都带上这个token,最后服务器验证token是否合法。但是这样有一个弊端:token很容易让别人获取到,这样就能访问任意的api,不安全。
这需要用上https来保证安全?想请教一下大家有哪些更好更安全的认证机制。
目前是采用json web token这种机制,验证合法用户后返回一个toekn,然后该用户每次请求都带上这个token,最后服务器验证token是否合法。但是这样有一个弊端:token很容易让别人获取到,这样就能访问任意的api,不安全。
这需要用上https来保证安全?想请教一下大家有哪些更好更安全的认证机制。
可以用上 HTTPS. 对于 token 验证的话, 可以增加一些限制, 比如 IP 范围. 用上了 HTTPS 还是有可能被劫持, 但是概率比较小, 我觉得是不用太担心的, 除非是什么不得了的网站. 用户名密码验证的话, 可以采用时间戳/验证码 + hash, 但同上, 如果用的 HTTPS 并不是很必要.
如果是WebAPP的话,最好全程https,参照OAuth2.0,这样开发比较简单。token是有生命周期,可以有IP限制(IP跟获取token时候的IP不一致就拒绝)
如果客户端是C++、安卓之类的也可以用OAuth1.0的老办法,每一次请求都要附上secret,secret是HMAC_SHA1("神秘代码¶m1="+param1+"¶m2="+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的安全性做高
5 回答4.8k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答1.9k 阅读
2 回答1.4k 阅读✓ 已解决
3 回答2k 阅读
1 回答3.3k 阅读
1.开放平台?开放平台一搬用oauth验证机制。
2.一般的接口验证的话,可以发放一个secretkey给用户(secretkey可以是通过oauth验证方式发放,也可以手动发放),然后请求参数加一个sign参数,sign等于hash(secretkey+paramsStr+secretkey),服务器验证sign是否合法,这种方式不需要传输secretkey。