zoukankan      html  css  js  c++  java
  • Token Authentication vs. Cookies

     Token Authentication vs. Cookies

    What is the difference between token authentication and authentication using cookies?

    I am trying to implement the Ember Auth Rails Demo but I do not understand the reasons behind using token authentication as described in the Ember Auth FAQ on the question "Why token authentication?"

    回答

    Http is stateless. In order to authorize you, you have to "sign" every single request you're sending to server.

    Token authentication

    • A request to the server is signed by a "token" - usually it means setting specific http headers, however, they can be sent in any part of the http request (POST body, etc.)  cookie也是http request的一部分,从属于http header

    • Pros:

      • You can authorize only the requests you wish to authorize. (Cookies - even the authorization cookie are sent for every single request.)
      • Immune免疫 to XSRF (Short example of XSRF - I'll send you a link in email that will look like <img src="http://bank.com?withdraw=1000&to=myself" />, and if you're logged in via cookie authentication to bank.com, and bank.com doesn't have any means of XSRF protection, I'll withdraw取钱 money from your account simply by the fact that your browser will trigger an authorized GET request to that url.) Note there are anti forgery measure you can do with cookie-based authentication - but you have to implement those.
      • Cookies are bound to a single domain. A cookie created on the domain foo.com can't be read by the domain bar.com, while you can send tokens to any domain you like. This is especially useful for single page applications that are consuming multiple services that are requiring authorization - so I can have a web app on the domain myapp.com that can make authorized client-side requests to myservice1.com and to myservice2.com.  token authentication不局限于domain
    • Cons:
      • You have to store the token somewhere; while cookies are stored "out of the box". The locations that comes to mind are

    localStorage (con: the token is persisted even after you close browser window),

    sessionStorage (pro: the token is discarded after you close browser window, con: opening a link in a new tab will render that tab anonymous)

    and cookies (Pro: the token is discarded after you close the browser window.If you use a session cookie you will be authenticated when opening a link in a new tab, and you're immune to XSRF since you're ignoring the cookie for authentication, you're just using it as token storage. Con: cookies are sent out for every single request. If this cookie is not marked as https only, you're open to man in the middle attacks.)

      • It is slightly easier to do XSS attack against token based authentication (i.e. if I'm able to run an injected script on your site, I can steal your token; however, cookie based authentication is not a silver bullet either - while cookies marked as http-only can't be read by the client, the client can still make requests on your behalf that will automatically include the authorization cookie.)
      • Requests to download a file, which is supposed to work only for authorized users, requires you to use File API. The same request works out of the box for cookie-based authentication.

    Cookie authentication

    • A request to the server is always signed in by authorization cookie.
    • Pros:
      • Cookies can be marked as "http-only" which makes them impossible to be read on the client side. This is better for XSS-attack protection.
      • Comes out of the box - you don't have to implement any code on the client side.
    • Cons:
      • Bound to a single domain. (So if you have a single page application that makes requests to multiple services, you can end up doing crazy stuff like a reverse proxy.)
      • Vulnerable to XSRF. You have to implement extra measures to make your site protected against cross site request forgery.
      • Are sent out for every single request, (even for requests that don't require authentication).

    Overall, I'd say tokens give you better flexibility, (since you're not bound to single domain). The downside is you have to do quite some coding by yourself.

    The phrase ‘pros and cons’ is an abbreviation of the Latin phrase pro et contra, ‘for and against’, where “pros” are for the plus points and “cons” are the negative ones. 

  • 相关阅读:
    mysql 数据类型总结
    #微信小程序子传父 #小程序子组件向父组件传值 小程序子组件触发父组件中的事件
    #最近看到了一个写的很棒的系列文章专栏
    《MySQL45讲》读书笔记(四):索引
    《MySQL45讲》读书笔记(六):数据库事务概述
    《MySQL45讲》读书笔记(一):三大日志概述
    Java基础篇(05):函数式编程概念和应用
    数据采集组件:Flume基础用法和Kafka集成
    架构设计:数据服务系统0到1落地实现方案
    Java基础篇(04):日期与时间API用法详解
  • 原文地址:https://www.cnblogs.com/chucklu/p/13166131.html
Copyright © 2011-2022 走看看