REST学习了不少,但是对其的认证方式却很模糊。通常一个好的REST API应该能适应浏览器或者本地客户端的认证。我开发了一个JAVA的WEB程序,提供了一个service的REST API,一开始我计划采用HTTP session的方式来认证。HTTP session可以很方便的提供认证。无论是ajax还是传统浏览器方式基于API可以很方便的认证,但是当我在使用客服端的时候遇见了问题。于是我开始尝试无状态的认证方式。我尝试了很多认证方式,比如HTTP basic 、 数字认证、http session、cookies、xsrf等等……。现在我都不知道是使用什么才是比较适合的认证了。
HTTP session VS stateless auth token
这·两种方式有什么不同?我不是太了解。
http session:
- 基于URL,必须提供一个url来认证
- server必须记住一些用户信息,而且会返还session id来标记(session的实习原理)
- 浏览器或者客服端必须每次在请求中包括这个字段,用来标示身份。(当清除cookies的时候会发生认证丢失)
- 浏览器或者客服端不用输入认证信息,当已经认证了的时候。(浏览器会发送比如session id给server)
stateless auth token:
- 需要请求的URL。
- server只会返回成功与否的状态,不会返回任何key、value。
- server会创建auth token然后发送给客服端。
- 访问需要权限的页面的时候,要求带着auth toke。
两种方式都很容易实现。无论是在浏览器或者客服端使用。
http basic
使用SSL协议的很多WEB service网站都使用http basic 来认证。http basic 认证非常的容易实现。但是认证需要https通道,登出注销无法控制。
参考文档
注释和共享