我正在将应用程序移植到 azure,在该应用程序中,我们使用 Active Directory 对用户进行身份验证,如下所示:
var user = model.UserName.Split('\\');
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, user[0]))
{
if (pc.ValidateCredentials(user[1], model.Password, ContextOptions.Negotiate))
{
using (var adUser = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, user[1]))
{
if (!MembershipService.ValidateUser(model.UserName, model.Password))
{
using (var userDb = new UsersDbContext())
{
if (userDb.aspnet_Users.Count(u => u.UserName.ToLower().Contains(model.UserName)) <= 0)
MembershipService.CreateUser(model.UserName, model.Password, adUser.EmailAddress);
else
{
var msUser = Membership.GetUser(model.UserName);
msUser.ChangePassword(msUser.ResetPassword(), model.Password);
}
}
}
FormsService.SignIn(model.UserName, model.RememberMe);
foreach (var role in Roles.GetAllRoles())
{
using (var group = GroupPrincipal.FindByIdentity(pc, role))
{
if (group != null)
{
if (adUser.IsMemberOf(group))
{
if (!Roles.IsUserInRole(model.UserName, role))
Roles.AddUserToRole(model.UserName, role);
}
else
{
if (Roles.IsUserInRole(model.UserName, role))
Roles.RemoveUserFromRole(model.UserName, role);
}
}
}
}
}
}
}
这在连接到我们的域服务器的网络服务器上运行良好。
现在我设置了一个 Windows Azure Active Directory 并将其配置为与我们的本地 AD 同步,这也可以工作。
但我现在正在努力寻找一种将我连接PrincipalContext
到 WAAD 的方法。
这甚至可能吗?如何?如果没有,有什么替代方案?
我只找到了使用单点登录的示例,它重定向到我们不想使用的 MS 登录页面,因为我们有混合身份验证,并且根据输入的用户名,它要么使用 ASP.NET 成员身份,要么拉取来自 AD 的用户和组(实际上创建了一个 ASP.NET Membership 用户,如上所示)。