示例#1
0
        protected virtual RelyingParty AnalyzeRelyingParty(RequestDetails details)
        {
            // check if the relying party is registered
            RelyingParty rp = null;

            if (RelyingPartyRepository.TryGet(details.Realm.Uri.AbsoluteUri, out rp))
            {
                details.RelyingPartyRegistration = rp;
                details.IsKnownRealm             = true;

                var traceString = String.Format("Relying Party found in registry - Realm: {0}", rp.Realm.AbsoluteUri);

                if (!string.IsNullOrEmpty(rp.Name))
                {
                    traceString += String.Format(" ({0})", rp.Name);
                }

                Tracing.Information(traceString);

                if (rp.EncryptingCertificate != null)
                {
                    details.EncryptingCertificate = rp.EncryptingCertificate;
                    Tracing.Information("Encrypting certificate set from registry");
                }
            }
            else
            {
                Tracing.Information("Relying party is not registered.");
            }
            return(rp);
        }
        private string WriteToken(SimpleWebToken swt)
        {
            if (swt == null)
            {
                throw new InvalidOperationException("token");
            }

            var unsignedToken = CreateUnsignedToken(swt);

            var RP = RelyingPartyRepository.List(0, 100).First(b => b.Realm == swt.AudienceUri);

            var hexString = Convert.ToBase64String(RP.SymmetricSigningKey);

            var hmac = new HMACSHA256(SFHelper.HexToByte(hexString));
            var sig  = hmac.ComputeHash(Encoding.ASCII.GetBytes(unsignedToken));

            var signedToken = String.Format("{0}&HMACSHA256={1}",
                                            unsignedToken,
                                            HttpUtility.UrlEncode(Convert.ToBase64String(sig)));

            return(signedToken);
        }