public async Task <SamlInboundMessage> Decode(IDictionary <string, string> request) { var result = new SamlInboundMessage(new Uri(Kernel.Federation.MetaData.Configuration.Bindings.Http_Post), null); foreach (var el in request) { var decoded = await this.DecodeElement(el); result.Elements.Add(decoded.Key, decoded.Value); } return(result); }
public async Task <SamlInboundMessage> Decode(Uri request) { var source = request.Query.TrimStart('?').Split('&') .Select(x => x.Split('=')) .ToDictionary(k => k[0], v => v[1]); var result = new SamlInboundMessage(new Uri(Kernel.Federation.MetaData.Configuration.Bindings.Http_Redirect), request); foreach (var el in source) { var decoded = await this.DecodeElement(el); result.Elements.Add(decoded.Key, decoded.Value); } return(result); }
private async Task <object> ResolveRelayState(SamlInboundMessage message, bool spInitiated) { if (!message.HasRelaySate) { return(null); } var relayStateRaw = message.RelayState; object relayState = relayStateRaw; if (spInitiated && relayStateRaw != null) { relayState = await this._relayStateHandler.Decode(relayStateRaw.ToString()); } message.Elements[HttpRedirectBindingConstants.RelayState] = relayState; return(relayState); }
internal static bool VerifyRedirectSignature(Uri request, X509Certificate2 certificate, SamlInboundMessage message, ICertificateManager certificateManager) { var queryString = request.Query.TrimStart('?'); var i = queryString.IndexOf("Signature"); if (i == -1) { throw new InvalidOperationException("No signature found."); } var data = queryString.Substring(0, i - 1); var sgn = message.Signature.Signature; var validated = certificateManager.VerifySignatureFromBase64(data, sgn, certificate); return(validated); }