Tag: saml

validationSAML断言上的签名

我有两个签名,一个在响应(validation),一个在嵌套的SAML断言(没有)。 这是我正在使用的精简代码: foreach (XmlElement node in xmlDoc.SelectNodes(“//*[local-name()=’Signature’]”)) {// Verify this Signature block SignedXml signedXml = new SignedXml(node.ParentNode as XmlElement); signedXml.LoadXml(node); KeyInfoX509Data x509Data = signedXml.Signature.KeyInfo.OfType().First(); // Verify certificate X509Certificate2 cert = x509Data.Certificates[0] as X509Certificate2; log.Info(string.Format(“Cert s/n: {0}”, cert.SerialNumber)); VerifyX509Chain(cert);// Custom method // Check for approval X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection collection = store.Certificates.Find(X509FindType.FindBySerialNumber, […]

如何避免’SamlAssertion.NotOnOrAfter条件不满意’错误

最近,我开始在现有的Web应用程序上使用基于声明的身份validation。 因为应用程序使用jQuery,尤其是AJAX函数,我不得不改变处理程序,不要尝试重定向XmlHTTPRequests ,而是返回403状态,这更容易处理。 这是FederatedAuthentication.WSFederationAuthenticationModule.AuthorizationFailed事件hanlder: protected void WSFederationAuthenticationModule_AuthorizationFailed(object sender, AuthorizationFailedEventArgs e) { //WSFederationAuthenticationModule sam = (WSFederationAuthenticationModule)sender; HttpContext context = HttpContext.Current; HttpRequest req = context.Request; HttpResponse resp = context.Response; if (req == null || resp == null) return; if ((resp.StatusCode == 302 || resp.StatusCode == 401) && req.Headers[“X-Requested-With”] == “XMLHttpRequest”) { resp.StatusCode = 403; e.RedirectToIdentityProvider = false; […]

从SAML令牌中读取SAML属性

我正在从XML文件加载SAML令牌。 string certificatePath = @”D:\Projects\SAMLDemo\Server.pfx”; X509Certificate2 cert = new X509Certificate2(certificatePath, “shani”); string samlFilePath = @”D:\Projects\SAMLDemo\saml.xml”; XmlReader reader = XmlReader.Create(samlFilePath); List tokens = new List(); tokens.Add(new X509SecurityToken(cert)); SecurityTokenResolver outOfBandTokenResolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(new ReadOnlyCollection(tokens), true); SecurityToken securityToken = WSSecurityTokenSerializer.DefaultInstance.ReadToken(reader, outOfBandTokenResolver); SamlSecurityToken deserializedSaml = securityToken as SamlSecurityToken; 如何从deserializedSaml中读取SAML属性? 我需要属性的字符串值。

如何创建测试签名证书?

我正在尝试按照这些说明使用WIF创建SAML2令牌。 说明说 要向SecurityTokenDescriptor提供签名凭据,您必须首先获得对签名证书的引用作为X509Certificate2实例。 从中您可以创建SecurityKeyIdentifier并生成SigningCredentials实例 提供以下代码: X509Certificate2 signingCert = CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, “CN=busta-rpsts.com “); SecurityKeyIdentifier ski = new SecurityKeyIdentifier(new SecurityKeyIdentifierClause[] { new X509SecurityToken(signingCert).CreateKeyIdentifierClause() }); X509SigningCredentials signingCreds = new X509SigningCredentials(signingCert, ski); descriptor.SigningCredentials = signingCreds; 我尝试使用包含主题密钥标识符的makecert制作测试证书,但是当我运行通过上面代码生成的任何证书时,我得到以下System.NotSupportedException : ‘X509SecurityToken’不支持’X509SubjectKeyIdentifierClause’创建。 调用此行时会发生这种情况: new X509SecurityToken(signingCert).CreateKeyIdentifierClause() 现在我知道说明说…… 注意:使用makecert.exe创建的证书不包含主题密钥标识符,因此不能以此方式使用。 您应该使用Windows Server生成证书或从Verisign或同等提供商处购买证书。 …但是我使用了-eku 2.5.29.14的论据,我希望能解决这个问题,我认为这张图片表明我做得对吗? 任何人都可以给我说明我如何创建一个测试证书,我可以使用它来使这段代码正常工作,或指向我正确的方向? 我也不确定他们的意思是“你应该用Windows Server生成证书”。 这是否意味着创建CSR? 提前致谢 :)

SSO SAML的签名XML签名validation(使用sha256)

在Windows 2003服务器上使用VS 2008和.Net Framework 3.5。 为了安全起见,我们使用SAML实施了SSO。 我们在服务提供商端工作,我们validation从客户端系统生成的签名XML SAML Assertuib令牌。 截至目前,我们遇到的任何签名文件都使用了签名算法“rsa-sha1”,但现在我们有新客户发送带有签名算法的文件“rsa-sha256”,这就是问题的开始。 public static string VerifySignature() { if (m_xmlDoc == null) return “Could not load XMLDocument “; try { XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable()); nsm.AddNamespace(“dsig”, SignedXml.XmlDsigNamespaceUrl); XmlElement sigElt = (XmlElement)m_xmlDoc.SelectSingleNode( “//dsig:Signature”, nsm); // Load the signature for verification SignedXml sig = new SignedXml(m_xmlDoc); sig.LoadXml(sigElt); if (!sig.CheckSignature()) […]

如何将SAML XML标记字符串转换为SecurityToken或ClaimsPrincipal实例?

我的背景: .Net RESTful Web服务 客户端(混合平台,技术,libfunction)已获得SAML令牌 尝试在REST服务中接受用于身份validation/授权的令牌 在HTTP授权/ X-Authorization标头中 作为查询参数 稍后还会支持SWT,但需要获得SAML令牌 细节: 我在字符串中有一个SAML令牌: ..etc… 在HttpModule中,我想将其转换为ClaimsPrincipal,以便我的服务可以将通常的Thread.CurrentPrincipal作为IClaimsPrincipal。 我找到了一些诱人的网页/博客/等……看起来很有帮助: Cibrax的想法是在HTTP Authorization标头中传递令牌 Dominick Baier在SWT上有类似的东西,提到SAML很容易做同样的事情 我实际上试图将SAML令牌转换为ClaimsPrincipal(通过SecurityToken中间步骤或直接……快乐)。 来自Cibrax的想法的示例代码使用以下内容进行关键validation和反序列化步骤: SecurityTokenSerializer securityTokenSerializer = new SecurityTokenSerializerAdapter( FederatedAuthentication.SecurityTokenHandlers, MessageSecurityVersion.Default.SecurityVersion, false, new SamlSerializer(), null, null); SecurityToken theToken = WSFederationAuthenticationModule.GetSecurityToken( theSamlTokenInStringForm, securityTokenSerializer); 我遇到的问题是,WIF的RTM版本没有公开GetSecurityToken的这个重载…它只暴露: WSFederationAuthenticationModule fam = new WSFederationAuthenticationModule(); SecurityToken theToken = fam.GetSecurityToken(HttpRequest theRequest); SecurityToken theToken = fam.GetSecurityToken(SignInResponseMessage message); […]

客户端请求中的SAML令牌后需要签名

我有一个序列化的SOAP请求消息,其中包含一个针对供应商服务的SAML令牌持有者。 我想在C#中创建一个演示程序来产生类似的请求。 为此,我想编写一个创建自己的SAML令牌的客户端。 我已经从自签名证书中成功创建了SAML2令牌,并且我能够使用ChannelFactoryOperations.CreateChannelWithIssuedToken方法(.Net 4.0)将其与请求相关联。 一切都运行良好,但我无法弄清楚在断言后放置签名所需的C#,并使用SAML令牌作为签名KeyIdentifier来签署时间戳。 我甚至不确定我在问什么,但似乎签名本身之后的签名应该是简单的部分。 但是,我在请求中获得SAML的唯一方法是声明它类型为BearerKey。 但BearerKey似乎在断言后省略了签名。 我似乎想要SymmetricKey,但令牌“没有键”。 如何在断言后出现这样的签名元素? 这里URI =“#_ 1”指的是上面的WS-Security时间戳(未示出)。