comparison mod_http_oauth2/mod_http_oauth2.lua @ 5262:e73f364b5624

mod_http_oauth2: Rename oauth client credential related functions To make it more explicit what "secret" these deal with.
author Kim Alvefur <zash@zash.se>
date Tue, 21 Mar 2023 21:36:54 +0100
parents 8fba651b10ef
children 381c62ef52aa
comparison
equal deleted inserted replaced
5261:6526b670e66d 5262:e73f364b5624
282 location = url.build(redirect); 282 location = url.build(redirect);
283 }; 283 };
284 } 284 }
285 end 285 end
286 286
287 local function make_secret(client_id) --> client_secret 287 local function make_client_secret(client_id) --> client_secret
288 return hashes.hmac_sha256(verification_key, client_id, true); 288 return hashes.hmac_sha256(verification_key, client_id, true);
289 end 289 end
290 290
291 local function verify_secret(client_id, client_secret) 291 local function verify_client_secret(client_id, client_secret)
292 return hashes.equals(make_secret(client_id), client_secret); 292 return hashes.equals(make_client_secret(client_id), client_secret);
293 end 293 end
294 294
295 function grant_type_handlers.authorization_code(params) 295 function grant_type_handlers.authorization_code(params)
296 if not params.client_id then return oauth_error("invalid_request", "missing 'client_id'"); end 296 if not params.client_id then return oauth_error("invalid_request", "missing 'client_id'"); end
297 if not params.client_secret then return oauth_error("invalid_request", "missing 'client_secret'"); end 297 if not params.client_secret then return oauth_error("invalid_request", "missing 'client_secret'"); end
303 local client_ok, client = jwt_verify(params.client_id); 303 local client_ok, client = jwt_verify(params.client_id);
304 if not client_ok then 304 if not client_ok then
305 return oauth_error("invalid_client", "incorrect credentials"); 305 return oauth_error("invalid_client", "incorrect credentials");
306 end 306 end
307 307
308 if not verify_secret(params.client_id, params.client_secret) then 308 if not verify_client_secret(params.client_id, params.client_secret) then
309 module:log("debug", "client_secret mismatch"); 309 module:log("debug", "client_secret mismatch");
310 return oauth_error("invalid_client", "incorrect credentials"); 310 return oauth_error("invalid_client", "incorrect credentials");
311 end 311 end
312 local code, err = codes:get(params.client_id .. "#" .. params.code); 312 local code, err = codes:get(params.client_id .. "#" .. params.code);
313 if err then error(err); end 313 if err then error(err); end
550 -- Notify client of rejection 550 -- Notify client of rejection
551 return error_response(request, oauth_error("access_denied")); 551 return error_response(request, oauth_error("access_denied"));
552 end 552 end
553 553
554 local user_jid = jid.join(auth_state.user.username, module.host); 554 local user_jid = jid.join(auth_state.user.username, module.host);
555 local client_secret = make_secret(params.client_id); 555 local client_secret = make_client_secret(params.client_id);
556 local id_token_signer = jwt.new_signer("HS256", client_secret); 556 local id_token_signer = jwt.new_signer("HS256", client_secret);
557 local id_token = id_token_signer({ 557 local id_token = id_token_signer({
558 iss = get_issuer(); 558 iss = get_issuer();
559 sub = url.build({ scheme = "xmpp"; path = user_jid }); 559 sub = url.build({ scheme = "xmpp"; path = user_jid });
560 aud = params.client_id; 560 aud = params.client_id;
673 -- timestamp should be sufficient to rule out brute force attacks 673 -- timestamp should be sufficient to rule out brute force attacks
674 client_metadata.nonce = id.short(); 674 client_metadata.nonce = id.short();
675 675
676 -- Do we want to keep everything? 676 -- Do we want to keep everything?
677 local client_id = jwt_sign(client_metadata); 677 local client_id = jwt_sign(client_metadata);
678 local client_secret = make_secret(client_id); 678 local client_secret = make_client_secret(client_id);
679 679
680 client_metadata.client_id = client_id; 680 client_metadata.client_id = client_id;
681 client_metadata.client_secret = client_secret; 681 client_metadata.client_secret = client_secret;
682 client_metadata.client_id_issued_at = os.time(); 682 client_metadata.client_id_issued_at = os.time();
683 client_metadata.client_secret_expires_at = 0; 683 client_metadata.client_secret_expires_at = 0;