Skip to content
Snippets Groups Projects
Commit b0d3fdb1 authored by Klaus Fischer's avatar Klaus Fischer
Browse files

WIP: TokenVerification for SET events not working for sender due to missing public key

parent 50e75ef0
No related branches found
No related tags found
1 merge request!9.NET-SDK: SET-Empfang inkl. Signaturprüfung - Ticket 562
...@@ -209,7 +209,7 @@ public class FitEncryption { ...@@ -209,7 +209,7 @@ public class FitEncryption {
return sb.ToString(); return sb.ToString();
} }
public static bool VerifyJwt(string signature, IEnumerable<JsonWebKey> keys, public static bool VerifyJwt(string signature, IEnumerable<JsonWebKey> keys,
ILogger? logger = null) { ILogger? logger = null) {
foreach (var key in keys) foreach (var key in keys)
......
...@@ -104,9 +104,17 @@ public abstract class FitConnectClient { ...@@ -104,9 +104,17 @@ public abstract class FitConnectClient {
public List<SecurityEventToken> GetStatusForSubmission(string caseId, string destinationId, public List<SecurityEventToken> GetStatusForSubmission(string caseId, string destinationId,
bool skipTest = false) { bool skipTest = false) {
var events = SubmissionService.GetStatusForSubmissionAsync(caseId, destinationId, skipTest) var events = SubmissionService.GetStatusForSubmissionAsync(caseId, destinationId, skipTest)
.Result; .Result?.Select(e => new SecurityEventToken(e!)).ToList() ??
return events?.Where(s => s != null) new List<SecurityEventToken>();
.Select(e => new SecurityEventToken(e!)).ToList() ?? new List<SecurityEventToken>();
// Check OCSP Signature of SET Event
#warning Sender has no way to verify the OCSP signature
if (_publicKeySignatureVerification != null) {
var setsSignatureValid = events.Aggregate(true,
(run, e) => run &= FitEncryption.VerifyJwt(e.TokenString,
new JsonWebKey(_publicKeySignatureVerification), Logger));
}
return events;
} }
/// <summary> /// <summary>
......
...@@ -18,7 +18,6 @@ public enum EventType { ...@@ -18,7 +18,6 @@ public enum EventType {
} }
public class SecurityEventToken { public class SecurityEventToken {
public const string CreateSubmissionSchema = public const string CreateSubmissionSchema =
"https://schema.fitko.de/fit-connect/events/create-submission"; "https://schema.fitko.de/fit-connect/events/create-submission";
...@@ -42,12 +41,12 @@ public class SecurityEventToken { ...@@ -42,12 +41,12 @@ public class SecurityEventToken {
public SecurityEventToken(string jwtEncodedString) { public SecurityEventToken(string jwtEncodedString) {
Token = new JsonWebToken(jwtEncodedString); TokenString = jwtEncodedString;
EventType = DecodeEventType(Token.Claims); EventType = DecodeEventType(Token.Claims);
if (Token.Claims.All(c => c.Type != "iat")) if (Token.Claims.All(c => c.Type != "iat"))
return; return;
var iat = Token.Claims.FirstOrDefault(c => c.Type == "iat")!.Value; var iat = Token.Claims.FirstOrDefault(c => c.Type == "iat")!.Value;
if (long.TryParse(iat, out var timeEpoch)) if (long.TryParse(iat, out var timeEpoch))
EventTime = DateTime.UnixEpoch.AddSeconds(timeEpoch); EventTime = DateTime.UnixEpoch.AddSeconds(timeEpoch);
...@@ -59,7 +58,8 @@ public class SecurityEventToken { ...@@ -59,7 +58,8 @@ public class SecurityEventToken {
public Events? Event { get; set; } public Events? Event { get; set; }
public object? Payload { get; set; } public object? Payload { get; set; }
public JsonWebToken Token { get; set; } public JsonWebToken Token => new JsonWebToken(TokenString);
public string TokenString { get; set; }
private EventType DecodeEventType(IEnumerable<Claim> claims) { private EventType DecodeEventType(IEnumerable<Claim> claims) {
var eventsClaim = claims.FirstOrDefault(c => c.Type == "events"); var eventsClaim = claims.FirstOrDefault(c => c.Type == "events");
...@@ -87,14 +87,12 @@ public class SecurityEventToken { ...@@ -87,14 +87,12 @@ public class SecurityEventToken {
ForwardSubmissionSchema)) ForwardSubmissionSchema))
return EventType.Forward; return EventType.Forward;
if (eventsClaim.Value.Contains( if (eventsClaim.Value.Contains(
RejectSubmissionSchema)) { RejectSubmissionSchema)) {
Problems = GetProblems(events?.Values?.FirstOrDefault()?.ToString() ?? ""); Problems = GetProblems(events?.Values?.FirstOrDefault()?.ToString() ?? "");
return EventType.Reject; return EventType.Reject;
} }
if (eventsClaim.Value.Contains(AcceptSubmissionSchema)) if (eventsClaim.Value.Contains(AcceptSubmissionSchema))
return EventType.Accept; return EventType.Accept;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment