我正在将应用程序移植到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,并将其配置为与我们的On-Premise AD同步,这也适用。
但我现在正在努力寻找一种方法将我的PrincipalContext
连接到WAAD。
这甚至可能吗?如果没有,有什么替代方案?
我只找到使用单点登录的示例,它将此重定向到我们不想使用的MS登录页面,因为我们有混合身份验证,并且根据输入的用户名,它使用ASP.NET成员身份或者从AD中提取用户和组(实际上创建了一个ASP.NET成员用户,如上所示)。
答案 0 :(得分:4)
没有
您无法在PrincipalContext中使用WAAD。必须在此明确声明您目前无法(2014年1月)针对WAAD进行直接用户身份验证。您需要重写应用程序的某些部分才能兼容: