comparison mod_http_oauth2/mod_http_oauth2.lua @ 5509:ae007be8a6bd

mod_http_oauth2: Add Cache-Control and Pragma headers per by RFC 6749 These are mostly for the various Client-facing endpoints, so the chance of browsers being involved is slightly lower than with the User-facing authorization endpoint, which already sent the Cache-Control header. Thanks to OAuch for pointing out.
author Kim Alvefur <zash@zash.se>
date Fri, 02 Jun 2023 08:59:59 +0200
parents fd4d89a5b8db
children a49d73e4262e
comparison
equal deleted inserted replaced
5508:56803acfa638 5509:ae007be8a6bd
64 ["Content-Type"] = "text/html; charset=utf-8"; 64 ["Content-Type"] = "text/html; charset=utf-8";
65 ["Content-Security-Policy"] = "default-src 'self'"; 65 ["Content-Security-Policy"] = "default-src 'self'";
66 ["Referrer-Policy"] = "no-referrer"; 66 ["Referrer-Policy"] = "no-referrer";
67 ["X-Frame-Options"] = "DENY"; 67 ["X-Frame-Options"] = "DENY";
68 ["Cache-Control"] = (sensitive and "no-store" or "no-cache")..", private"; 68 ["Cache-Control"] = (sensitive and "no-store" or "no-cache")..", private";
69 ["Pragma"] = "no-cache";
69 }; 70 };
70 body = _render_html(template, data); 71 body = _render_html(template, data);
71 }; 72 };
72 return resp; 73 return resp;
73 end 74 end
358 redirect.query = http.formencode(query); 359 redirect.query = http.formencode(query);
359 360
360 return { 361 return {
361 status_code = 303; 362 status_code = 303;
362 headers = { 363 headers = {
364 cache_control = "no-store";
365 pragma = "no-cache";
363 location = url.build(redirect); 366 location = url.build(redirect);
364 }; 367 };
365 } 368 }
366 end 369 end
367 370
380 redirect.fragment = http.formencode(token_info); 383 redirect.fragment = http.formencode(token_info);
381 384
382 return { 385 return {
383 status_code = 303; 386 status_code = 303;
384 headers = { 387 headers = {
388 cache_control = "no-store";
389 pragma = "no-cache";
385 location = url.build(redirect); 390 location = url.build(redirect);
386 }; 391 };
387 } 392 }
388 end 393 end
389 394
618 .. "&" .. http.formencode({ state = q.state, iss = get_issuer() }); 623 .. "&" .. http.formencode({ state = q.state, iss = get_issuer() });
619 module:log("warn", "Sending error response to client via redirect to %s", redirect_uri); 624 module:log("warn", "Sending error response to client via redirect to %s", redirect_uri);
620 return { 625 return {
621 status_code = 303; 626 status_code = 303;
622 headers = { 627 headers = {
628 cache_control = "no-store";
629 pragma = "no-cache";
623 location = redirect_uri; 630 location = redirect_uri;
624 }; 631 };
625 }; 632 };
626 end 633 end
627 634
658 665
659 function handle_token_grant(event) 666 function handle_token_grant(event)
660 local credentials = get_request_credentials(event.request); 667 local credentials = get_request_credentials(event.request);
661 668
662 event.response.headers.content_type = "application/json"; 669 event.response.headers.content_type = "application/json";
670 event.response.headers.cache_control = "no-store";
671 event.response.headers.pragma = "no-cache";
663 local params = http.formdecode(event.request.body); 672 local params = http.formdecode(event.request.body);
664 if not params then 673 if not params then
665 return oauth_error("invalid_request"); 674 return oauth_error("invalid_request");
666 end 675 end
667 676
772 return ret; 781 return ret;
773 end 782 end
774 783
775 local function handle_revocation_request(event) 784 local function handle_revocation_request(event)
776 local request, response = event.request, event.response; 785 local request, response = event.request, event.response;
786 response.headers.cache_control = "no-store";
787 response.headers.pragma = "no-cache";
777 if request.headers.authorization then 788 if request.headers.authorization then
778 local credentials = get_request_credentials(request); 789 local credentials = get_request_credentials(request);
779 if not credentials or credentials.type ~= "basic" then 790 if not credentials or credentials.type ~= "basic" then
780 response.headers.www_authenticate = string.format("Basic realm=%q", module.host.."/"..module.name); 791 response.headers.www_authenticate = string.format("Basic realm=%q", module.host.."/"..module.name);
781 return 401; 792 return 401;
964 local response, err = create_client(client_metadata); 975 local response, err = create_client(client_metadata);
965 if err then return err end 976 if err then return err end
966 977
967 return { 978 return {
968 status_code = 201; 979 status_code = 201;
969 headers = { content_type = "application/json" }; 980 headers = {
981 cache_control = "no-store";
982 pragma = "no-cache";
983 content_type = "application/json";
984 };
970 body = json.encode(response); 985 body = json.encode(response);
971 }; 986 };
972 end 987 end
973 988
974 if not registration_key then 989 if not registration_key then