C# SAML断言/验证如何使用X509公钥
在我的asp.net MVC网站中,我实现了SSO,其中IDP/ADFS发送SAML响应,我验证SAML令牌以允许用户访问网站。我正在使用自定义代码(使用System.IdentityModel.dll和System.IdentityModel.Services.dll库来验证SAML响应和令牌,而不是让.net framework使用web.config设置进行检查) 到目前为止,代码似乎运行良好,但由于我是这个领域的新手,我担心黑客可能会通过正确构造的SAML响应绕过验证。最近我尝试了SAML令牌生成部分,我意识到如果智能生成令牌,我的令牌验证代码可以被绕过 在高级阶段,我正在执行以下操作来验证令牌:C# SAML断言/验证如何使用X509公钥,c#,saml-2.0,adfs,x509certificate2,ws-federation,C#,Saml 2.0,Adfs,X509certificate2,Ws Federation,在我的asp.net MVC网站中,我实现了SSO,其中IDP/ADFS发送SAML响应,我验证SAML令牌以允许用户访问网站。我正在使用自定义代码(使用System.IdentityModel.dll和System.IdentityModel.Services.dll库来验证SAML响应和令牌,而不是让.net framework使用web.config设置进行检查) 到目前为止,代码似乎运行良好,但由于我是这个领域的新手,我担心黑客可能会通过正确构造的SAML响应绕过验证。最近我尝试了SAM
public ActionResult SAMLAssert()
{
var fam = new WSFederationAuthenticationModule();
var request = this.HttpContext.Request;
// Get the security token from the SAML response
var securityToken = fam.GetSecurityToken(request);
var config = new SecurityTokenHandlerConfiguration
{
CertificateValidator = X509CertificateValidator.None,
IssuerNameRegistry = new CustomIssuerNameRegistry(),
};
config.AudienceRestriction.AudienceMode = AudienceUriMode.Never;
var tokenHandler = new Saml2SecurityTokenHandler
{
CertificateValidator = X509CertificateValidator.None,
Configuration = config,
};
//// validate the token and get the ClaimsIdentity out of it
var identity = tokenHandler.ValidateToken(securityToken);
bool isSuccess = identity[0].IsAuthenticated;
// Code to retrieve the claims/user information from the token
//....
return View();
}
这是“发行人注册”的习俗
我怀疑自定义类是有问题的部分,因为它没有进行任何验证
public class CustomIssuerNameRegistry : IssuerNameRegistry
{
public override string GetIssuerName(SecurityToken securityToken)
{
X509SecurityToken x509Token = securityToken as X509SecurityToken;
return x509Token.Certificate.Subject;
}
}