Compare commits

...

2 Commits

Author SHA1 Message Date
DESKTOP-T0O5CDB\DESK-555BD
4d9c5c7237 add confirmation field for admin password. 2025-11-10 08:18:05 -07:00
DESKTOP-T0O5CDB\DESK-555BD
d4f06b96ff add exception logging for JWT validation failure 2025-11-10 08:00:37 -07:00
2 changed files with 17 additions and 3 deletions

View File

@ -146,6 +146,7 @@ namespace CarCareTracker.Controllers
var userAccessToken = decodedToken?.access_token ?? string.Empty;
var tokenParser = new JsonWebTokenHandler();
bool passedSignatureCheck = true;
string signatureValidationError = "check jwks endpoint";
if (!string.IsNullOrWhiteSpace(openIdConfig.JwksURL))
{
//validate token signature if jwks endpoint is provided
@ -165,6 +166,10 @@ namespace CarCareTracker.Controllers
if (!validatedIdToken.IsValid)
{
passedSignatureCheck = false;
if (validatedIdToken.Exception != null && !string.IsNullOrWhiteSpace(validatedIdToken.Exception.Message))
{
signatureValidationError = validatedIdToken.Exception.Message;
}
}
}
}
@ -238,7 +243,7 @@ namespace CarCareTracker.Controllers
}
else
{
_logger.LogError($"OpenID Provider did not provide a valid id_token: check jwks endpoint");
_logger.LogError($"OpenID Provider did not provide a valid id_token: {signatureValidationError}");
}
}
else
@ -329,6 +334,10 @@ namespace CarCareTracker.Controllers
if (!validatedIdToken.IsValid)
{
passedSignatureCheck = false;
if (validatedIdToken.Exception != null && !string.IsNullOrWhiteSpace(validatedIdToken.Exception.Message))
{
results.Add(OperationResponse.Failed($"Failed JWT Validation: {validatedIdToken.Exception.Message}"));
}
} else
{
results.Add(OperationResponse.Succeed($"Passed JWT Validation - Valid To: {validatedIdToken.SecurityToken.ValidTo}"));

View File

@ -406,15 +406,20 @@
title: 'Setup Credentials',
html: `
<input type="text" id="authUsername" class="swal2-input" placeholder="Username">
<input type="password" id="authPassword" class="swal2-input" placeholder="Password" onkeydown="handleSwalEnter(event)">
<input type="password" id="authPassword" class="swal2-input" placeholder="Password">
<input type="password" id="authPasswordVerify" class="swal2-input" placeholder="Confirm Password" onkeydown="handleSwalEnter(event)">
`,
confirmButtonText: 'Setup',
focusConfirm: false,
preConfirm: () => {
const username = $("#authUsername").val();
const password = $("#authPassword").val();
const passwordConfirm = $("#authPasswordVerify").val();
if (!username || !password) {
Swal.showValidationMessage(`Please enter username and password`)
Swal.showValidationMessage(`Please enter username and password`);
}
if (password != passwordConfirm){
Swal.showValidationMessage(`Passwords must match`);
}
return { username, password }
},