我有一个设置了 ADFS 2.0 服务器来使用智能卡身份验证。
如果用户已经存在于 AD 中或者没有被禁用,它会很好地工作。
简单介绍一下背景,我们运营一个使用第三方 PKI 进行用户身份验证的 Active Directory 林。我们不信任原始 AD,只信任 PKI,因此将根据需要创建用户帐户。可能会有数万名用户,因此我们希望该过程是自助的。
当某人无法登录时(由于其帐户不存在或其帐户被禁用),将引发两个错误,事件 364(始终相同)和事件 111(表示用户名/密码失败或帐户被禁用)。
据我所知,错误页面似乎仅提取事件 364,这毫无帮助。
有什么方法可以找出智能卡登录时用户身份验证失败的原因?
答案1
我最终重写了 error.aspx.cs 来运行并尝试获取帐户,然后检查它是否有问题。
该代码非常适合我的环境,但用 c# 编写仍然相当简单
对于那些感兴趣的人,一些伪代码:
添加至顶部:
using System.Security.Cryptography.X509Certificates
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
在 page_load 的底部:
X509Certificate2 cert = new X509Certificate2(Request.this.Request.ClientCertificate);
X509Extension SAN = cert.Extensions["Subject Alternative Name"];
if (SAN!=null){
string principalname = [parse out principalname from SAN];
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DomainName", "OU");
UserPrincipal principal= UserPrincipal.FindByIdentity(ctx, IdentityType.UserPrincipalName, principalname);
if (principal!=null) {
[check if disabled, display message accordingly]
principal.Dispose();
} else {
[display message about account not exisiting]
}
ctx.Dispose();
}