Asp.net mvc 是否在Azure中使用同步的Active Directory验证用户(包括组)?
我正在将一个应用程序移植到azure,在该应用程序中,我们使用Active Directory对用户进行身份验证,如下所示:Asp.net mvc 是否在Azure中使用同步的Active Directory验证用户(包括组)?,asp.net-mvc,azure,active-directory,azure-active-directory,Asp.net Mvc,Azure,Active Directory,Azure Active Directory,我正在将一个应用程序移植到azure,在该应用程序中,我们使用Active Directory对用户进行身份验证,如下所示: var user = model.UserName.Split('\\'); using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, user[0])) { if (pc.ValidateCredentials(user[1], model.Password, ContextOpt
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);
}
}
}
}
}
}
}
var user=model.UserName.Split('\\');
使用(PrincipalContext pc=new PrincipalContext(ContextType.Domain,用户[0]))
{
if(pc.ValidateCredentials(用户[1],型号.密码,上下文选项.协商))
{
使用(var adUser=UserPrincipal.FindByIdentity(pc,IdentityType.SamAccountName,user[1]))
{
if(!MembershipService.ValidateUser(model.UserName,model.Password))
{
使用(var userDb=new UsersDbContext())
{
如果(userDb.aspnet_Users.Count(u=>u.UserName.ToLower().Contains(model.UserName))No
您不能将PrincipalContext与WAAD一起使用。必须在此处明确说明您目前(2014年1月)无法对WAAD进行直接用户身份验证。您需要重写应用程序的某些部分以使其兼容:
- 身份验证仅在WAAD端进行,您的代码无法进行用户+密码验证。这也发生在WAAD提供的登录页面上。您对该页面的外观控制有限,可以通过自定义该页面
- 您可以使用
- 探索Graph API以了解您可能需要的其他操作(即要求用户的组成员资格、直接报告等)
- 您必须从Windows身份验证切换到联合身份验证。根据您使用的VS版本,这可能很容易,也可能很难。对于VS 2012,有。而在2013年,身份验证只能在您创建项目时配置,以后不能更改。但您可以从其他项目复制配置更改ct结束。您需要在web.config文件中进行更改,以及在global.asax.Check中初始化的内容-尽管关于VS 2013 RC,但在RTM中的过程是相同的
否
您不能将PrincipalContext与WAAD一起使用。必须在此处明确说明您目前(2014年1月)无法对WAAD进行直接用户身份验证。您需要重写应用程序的某些部分以使其兼容:
- 身份验证仅在WAAD端进行,您的代码无法进行用户+密码验证。这也发生在WAAD提供的登录页面上。您对该页面的外观控制有限,可以通过自定义该页面
- 您可以使用
- 探索Graph API以了解您可能需要的其他操作(即要求用户的组成员资格、直接报告等)
- 您必须从Windows身份验证切换到联合身份验证。根据您使用的VS版本,这可能很容易,也可能很难。对于VS 2012,有。而在2013年,身份验证只能在您创建项目时配置,以后不能更改。但您可以从其他项目复制配置更改ct结束。您需要在web.config文件中进行更改,以及在global.asax.Check中初始化的内容-尽管关于VS 2013 RC,但在RTM中的过程是相同的
我认为您可能需要在自定义身份验证实现中使用WAAD Graph API。我认为您可能需要在自定义身份验证实现中使用WAAD Graph API。我通过使用azure AD搜索联合身份验证发现了以下内容:-我有权这样做吗?我可以这样做吗?不,这绝对是不正确的与您的项目相关。这是关于使用ADFS对Windows Azure服务总线进行身份验证。您唯一的选择是我描述的方式。嗯,好的-我想这是您提到的“联合身份验证”…您有这样的示例吗?但这不也使用“登录页”吗?我通过搜索azure AD的联合身份验证找到了以下内容:-我有权这样做吗?我可以这样做吗?不,这与您的项目完全无关。这是关于使用ADFS对Windows azure服务总线进行身份验证。您唯一的选择是我描述的方式。嗯,好的-我认为这是您提到的“联邦身份验证”…您有这样的例子吗?但这不也使用“登录页面”吗?