🐛 Fix verify signing string failed due to gateway changed the host
This commit is contained in:
@@ -60,7 +60,7 @@ public class ActivityPubSignatureService(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var signingString = BuildSigningString(context, signatureParts);
|
var signingString = BuildIncomingSigningString(context, signatureParts);
|
||||||
var signature = signatureParts.GetValueOrDefault("signature");
|
var signature = signatureParts.GetValueOrDefault("signature");
|
||||||
|
|
||||||
logger.LogInformation("Built signing string for verification. SigningString: {SigningString}, Signature: {Signature}",
|
logger.LogInformation("Built signing string for verification. SigningString: {SigningString}, Signature: {Signature}",
|
||||||
@@ -103,7 +103,7 @@ public class ActivityPubSignatureService(
|
|||||||
actorUri, publisher.Id);
|
actorUri, publisher.Id);
|
||||||
|
|
||||||
var headersToSign = new[] { RequestTarget, "host", "date", "digest" };
|
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);
|
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>();
|
var parts = new Dictionary<string, string>();
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ public class ActivityPubSignatureService(
|
|||||||
return parts;
|
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(' ');
|
var headers = signatureParts.GetValueOrDefault("headers")?.Split(' ');
|
||||||
if (headers == null || headers.Length == 0)
|
if (headers == null || headers.Length == 0)
|
||||||
@@ -211,7 +211,7 @@ public class ActivityPubSignatureService(
|
|||||||
foreach (var header in headers)
|
foreach (var header in headers)
|
||||||
{
|
{
|
||||||
if (sb.Length > 0)
|
if (sb.Length > 0)
|
||||||
sb.Append("\n");
|
sb.Append('\n');
|
||||||
|
|
||||||
sb.Append(header.ToLower());
|
sb.Append(header.ToLower());
|
||||||
sb.Append(": ");
|
sb.Append(": ");
|
||||||
@@ -222,6 +222,10 @@ public class ActivityPubSignatureService(
|
|||||||
var path = context.Request.Path.Value ?? "";
|
var path = context.Request.Path.Value ?? "";
|
||||||
sb.Append($"{method} {path}");
|
sb.Append($"{method} {path}");
|
||||||
}
|
}
|
||||||
|
else if (header == "host")
|
||||||
|
{
|
||||||
|
sb.Append(Domain);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (context.Request.Headers.TryGetValue(header, out var values))
|
if (context.Request.Headers.TryGetValue(header, out var values))
|
||||||
@@ -234,7 +238,7 @@ public class ActivityPubSignatureService(
|
|||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private string BuildSigningStringForRequest(HttpRequestMessage request, string[] headers)
|
private string BuildOutgoingSigningString(HttpRequestMessage request, string[] headers)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
logger.LogInformation("Building signing string for request. Headers to sign: {Headers}",
|
logger.LogInformation("Building signing string for request. Headers to sign: {Headers}",
|
||||||
|
|||||||
Reference in New Issue
Block a user