🐛 Fix verify signing string failed due to gateway changed the host

This commit is contained in:
2025-12-30 12:48:53 +08:00
parent 10067f6141
commit d02edbd38d

View File

@@ -60,7 +60,7 @@ public class ActivityPubSignatureService(
return false;
}
var signingString = BuildSigningString(context, signatureParts);
var signingString = BuildIncomingSigningString(context, signatureParts);
var signature = signatureParts.GetValueOrDefault("signature");
logger.LogInformation("Built signing string for verification. SigningString: {SigningString}, Signature: {Signature}",
@@ -103,7 +103,7 @@ public class ActivityPubSignatureService(
actorUri, publisher.Id);
var headersToSign = new[] { RequestTarget, "host", "date", "digest" };
var signingString = BuildSigningStringForRequest(request, headersToSign);
var signingString = BuildOutgoingSigningString(request, headersToSign);
logger.LogInformation("Signing string for outgoing request: {SigningString}", signingString);
@@ -182,7 +182,7 @@ public class ActivityPubSignatureService(
}
}
private Dictionary<string, string>? ParseSignatureHeader(string signatureHeader)
private static Dictionary<string, string>? ParseSignatureHeader(string signatureHeader)
{
var parts = new Dictionary<string, string>();
@@ -200,7 +200,7 @@ public class ActivityPubSignatureService(
return parts;
}
private string BuildSigningString(HttpContext context, Dictionary<string, string> signatureParts)
private string BuildIncomingSigningString(HttpContext context, Dictionary<string, string> signatureParts)
{
var headers = signatureParts.GetValueOrDefault("headers")?.Split(' ');
if (headers == null || headers.Length == 0)
@@ -211,7 +211,7 @@ public class ActivityPubSignatureService(
foreach (var header in headers)
{
if (sb.Length > 0)
sb.Append("\n");
sb.Append('\n');
sb.Append(header.ToLower());
sb.Append(": ");
@@ -222,6 +222,10 @@ public class ActivityPubSignatureService(
var path = context.Request.Path.Value ?? "";
sb.Append($"{method} {path}");
}
else if (header == "host")
{
sb.Append(Domain);
}
else
{
if (context.Request.Headers.TryGetValue(header, out var values))
@@ -234,7 +238,7 @@ public class ActivityPubSignatureService(
return sb.ToString();
}
private string BuildSigningStringForRequest(HttpRequestMessage request, string[] headers)
private string BuildOutgoingSigningString(HttpRequestMessage request, string[] headers)
{
var sb = new StringBuilder();
logger.LogInformation("Building signing string for request. Headers to sign: {Headers}",