什么是使用REST Web服务时使用的认证令牌,而不是通过HTTPS每次提出请求时发送的用户名,密码/加密的价值?
据我所知,比如OAUTH有一定的好处,因为你不需要放弃你的密码到第三方,你可以传递一个令牌就是你不想共享的用户名/ password..etc可信的第三方
但除了以上我当然不需要在我的情况下,这个特殊津贴等,我为什么要使用令牌,而不是每次发送的用户名/密码。
这可能是为了让生活方便客户端,它不必发送用户名/密码每次。 好确定,但那么现在客户必须记住我的令牌,并给我的令牌在每次请求。 因此,而不是记住/现在发送的用户名/密码,它会做记号一样! 因此,客户端实现代码没有得到任何减少。
那么,什么是真正的价值吗?
这真的取决于具体的方案 - 这是很难说没有更多地了解API - 但“认证令牌”的使用还远远没有普及,你说得对,很多的API并不需要(不使用)它们。 许多API仅仅需要一个API密钥与每个请求一起发送(通常通过HTTPS,以防止重要信息被窃取),或需要一个API密钥识别用户,并与“秘密密钥”的数字签名来证明用户的身份(见当大多数API,为什么他们需要两种认证的,即密钥和私密的工作? )。
用户名/密码是不是经常在公共API使用,因为他们没有足够的灵活性,不提供用户身份和应用程序的身份之间有足够的“分离”。 如您注册成为开发者使用Flickr的API和创建使用API的iPhone应用程序 - 你真的希望你的开发人员用户名/密码被内置到应用程序? 如果以后更改您的密码是什么? 如果你要开发5个应用程序和单独跟踪使用情况他们能够关闭在任何时候任何应用程序,而不会影响其他人怎么办?
但是,对于你真正想只能识别人类用户,而不是一个应用项目的情况下(如私有API的后端,将只会自己的应用程序,而不是公共API),在大多数情况下我看不出有什么错与你的建议,即用户名/每个请求的密码通过HTTPS。 哦,对了,身份验证令牌都被“restrictable”额外的好处(可以在一定的时间到期,可以限制只有特定的动作等),但显然这只是在非常特殊的情况下非常有用。
另外:由于用户“丹”上述人士指出,设计需要与每个请求发送用户名/密码的API时(或真的任何要求,哪怕仅仅是登录请求),你如何做到这一点要小心。 如果您正在使用哪些浏览器在默认情况下(如HTTP基本认证)支持的技术,你妨碍自己从以往任何时候都安全暴露的API来跨域用户(即最有可能你的API不能安全地直接从浏览器调用,即从AJAX /闪光灯/ Silverlight的代码)。
这是一个复杂的问题,不能完全说明如下,但是要记住,如果你的API是依赖于任何安全证书,浏览器可以记住,然后“悄无声息”,在每一个请求注入(例如HTTP基本认证,饼干),那么它是不是安全,从而实现跨域名访问使用任何跨域技术(CORS,JSONP,crossdomain.xml的,等)的API。
我可以回答这个问题的最好办法是给你指向此页面描述REST的安全性。 它属于的Restlet维基,而不是球衣,但因为它们都REST实现它可以适用于新泽西州为好。
这是从我所提供的链接中提取:
“对于大多数阻力,服务器可以与应用程序级授权令牌存在于客户机,一个不透明的值,该服务器可以验证属于权利认证的用户。