Files
git.stella-ops.org/src/__Libraries/StellaOps.Auth.Security/Dpop/DpopProofValidator.Helpers.cs

54 lines
1.2 KiB
C#

using Microsoft.IdentityModel.Tokens;
using System.Text.Json;
namespace StellaOps.Auth.Security.Dpop;
public sealed partial class DpopProofValidator
{
private static string NormalizeHtu(Uri uri)
{
var builder = new UriBuilder(uri)
{
Fragment = null,
Query = null
};
return builder.Uri.ToString();
}
private static bool TryDecodeSegment(
string token,
int segmentIndex,
out JsonElement element,
out string? error)
{
element = default;
error = null;
var segments = token.Split('.');
if (segments.Length != 3)
{
error = "Token must contain three segments.";
return false;
}
if (segmentIndex < 0 || segmentIndex > 2)
{
error = "Segment index out of range.";
return false;
}
try
{
var json = Base64UrlEncoder.Decode(segments[segmentIndex]);
using var document = JsonDocument.Parse(json);
element = document.RootElement.Clone();
return true;
}
catch (Exception ex)
{
error = ex.Message;
return false;
}
}
}