I think the points raised in @ConorMancone 's self-answer are all good and helpful. Thanks, Conor!
The oneOne thing I would add to the other answers is that CSRF protection is necessary only in the domain and path of the cookie in question. Or put another way:
Authorization != Authentication
Cookies == Authentication
Token == Authorization
This is relevant to the implementation of persistent logins (your 3rd point). If you affix your cookies to login.example.com
, which hosts your login UI and your /authorize
endpoint, then you can run an implicit OAuth flow every few minutes without requiring a new login (e.g. no password dialog). The client can go ahead and send the access token thus acquired to api.example.com
without CSRF, as no cookies will be sent to that host.
So, you can still safely avoid dealing with CSRF on your REST APIs. But your login / authentication server better be bullet-proof (and CSRF protected).
P.S. This is an answer, vs a comment, only because I'm new here ...