So make your webpage send the authtoken in a cookie and leave off the Authorization header, and have your third party (presumably native) clients send an Authorization header but not any cookies, and write your server software to check for both.
The point of the cookies being HttpOnly is that it makes them completely inaccessible to client side JavaScript, making a whole load of session hijack/XSS attacks impossible.
The request for a bearer token here circumvents this protection because then there’s a way for a client to avoid cookies all together, making the API vulnerable again.
Under what circumstance would a web client need to send an Authorization header at all? The browser sends the cookie and the server treats that as equivalent.
Malicious JavaScript in that case could theoretically forge a request using an auth token it acquired some other way by sending it as Authorization: Bearerin addition to the cookie, but 1) this would be extremely easy to defend against (just check for the cookie before you check the Authorization header) and 2) it would still not allow malicious JS code to access the user’s auth token which was still stored in an HTTP only cookie, or really do anything that server side code (read: script kiddie scripts) couldn’t, apart from sending a request from the web client’s IP address.
Okay.
So make your webpage send the authtoken in a cookie and leave off the
Authorization
header, and have your third party (presumably native) clients send anAuthorization
header but not any cookies, and write your server software to check for both.This seems trivial. What am I missing?
The point of the cookies being HttpOnly is that it makes them completely inaccessible to client side JavaScript, making a whole load of session hijack/XSS attacks impossible.
The request for a bearer token here circumvents this protection because then there’s a way for a client to avoid cookies all together, making the API vulnerable again.
Under what circumstance would a web client need to send an
Authorization
header at all? The browser sends the cookie and the server treats that as equivalent.Malicious JavaScript in that case could theoretically forge a request using an auth token it acquired some other way by sending it as
Authorization: Bearer
in addition to the cookie, but 1) this would be extremely easy to defend against (just check for the cookie before you check theAuthorization
header) and 2) it would still not allow malicious JS code to access the user’s auth token which was still stored in an HTTP only cookie, or really do anything that server side code (read: script kiddie scripts) couldn’t, apart from sending a request from the web client’s IP address.Dude literally said to do this for browser clients, and only support bearer tokens for non browser clients.