Cookie和JWT之间针对本机移动应用程序的显着差异

时间:2015-03-22 22:16:15

标签: ios session authentication cookies jwt

我一直在我的网络应用中使用Cookie进行身份验证和会话控制,并且满足于其功能。

iOS应用程序开发人员介绍了新热门的东西是JWT(JSON Web Token)。他告诉我,JWT是为本机移动应用程序进行身份验证和会话的方式,并且没有给出具体示例,他建议iOS和Android应用程序都有各种Cookie问题。

所以我查了一下JWT,例如http://angular-tips.com/blog/2014/05/json-web-tokens-introduction/https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/,我没有看到为什么它比Cookie更好(甚至更不同),更具体地说,为什么它在原生移动应用中做得更好。看来,至少iOS,处理Cookie很好(Persisting Cookies In An iOS Application?)。

所以我的问题是,对于与服务器端API交互的本机移动应用程序,使用JWT而不是Cookie进行身份验证和会话的具体优势和相关用例是什么?请突出显示Cookies根本无法做到的事情或更糟糕的事情。

2 个答案:

答案 0 :(得分:12)

我们软件开发人员(有时)倾向于在我们看到的任何地方应用新的热门东西;如果我们所拥有的只是一把锤子,一切看起来就像一个钉子,这可能是说法的变体。在这种情况下,我们只是感到绝望的冲动,使用我们学到的这个新东西。

关于这种比较的一个有趣的观点是,JWT或Cookie实际上都不是自己的身份验证机制;第一个只定义token format,第二个定义为HTTP state management mechanism。只有这足以让我们有一个迹象表明,提倡一个比另一个更好是错误的。

然而,两者都在认证系统中大量使用。

传统的服务器端Web应用程序使用cookie来跟踪经过身份验证的用户,以便他们不会被迫在每次请求时提供其凭据。通常,cookie的内容将是(希望)随机生成的唯一标识符,服务器将使用该标识符来查找存储在服务器上的会话数据。

然而,对于一种新型的Web应用程序--API--接受令牌(大多数时候采用JWT格式)更为常见,作为服务器决定是否应该授予访问权限的方式请求。造成这种情况的原因可能是因为传统的Web应用程序有一种主要类型的客户端,即完全支持cookie的Web浏览器,API通常由更简单的HTTP客户端使用,这些客户端本身不支持cookie。

我认为这也是我们可能认为基于令牌的身份验证对本机移动应用程序更有意义的原因。这些应用程序通常依赖于服务器端Web API,我们已经看到,如果API支持令牌,它将增加可以使用它的客户端的范围,因此这是最实际的事情。

总而言之,为了回答您的具体问题,我想说JWT确实比原生移动应用程序上的cookie更具优势,因为它们目前非常普遍使用,这意味着更多的学习资源,SDK,已知陷阱(主要是因为其他人已经做过而且失败了)等等。

尽管如此,只有在他们为您提供所需的安全保证并最终简化您的方案时才使用它们。如果你还没有完成它,我想你也会感激Cookies vs Tokens: The Definitive Guide

答案 1 :(得分:0)

我不能说Android,但在iOS上,Cookie可以与标题一起使用URLSession。一旦您可以使用(标准)API权限(例如,专用的,正确配置的会话以及每个Web应用的cookie存储...),iOS对该决定的影响应该可以忽略不计。