我应该在 ASP.NET 5 中使用 Windows 身份验证吗?
Should I Use Windows Authentication in ASP.NET 5?
我习惯于创建内部 asp.net windows 身份验证应用程序,这些应用程序会自动填充一个 Windows 主体,该主体拥有关于用户名和一些组信息的声明,我认为这些信息来自 Active目录。我安装了 Visual Studio 2015 并尝试使用 ASP.NET 5 网络应用程序,但 Windows 身份验证显示为灰色。我一直在学习基于声明的身份验证,也了解 ASP.NET 5 将带给 table 的跨平台功能,我可能需要摆脱 windows 身份验证。
虽然这个内部 Web 应用程序位于 Active Directory 域中,但我不想在不需要时向用户询问凭据,因为这将在 IIS 之上进行。 应该如何获取当前用户?我是否需要选择不同的身份验证方法并以某种方式通过其他方法从 AD 获取声明,或者 windows 身份验证仍然是这种情况的推荐选项并且最终会可用?
我还没有玩过 v5,但我在我的 Intranet 应用程序中使用 windows 身份使用 SSO。您是否尝试过 GenericPrincipal?现在我很好奇,需要和我的雇主谈谈测试 .NET 5...
使用 GenericPrincipal 和 IIdentity,您可以从登录 Windows 的用户的活动目录中获取任何内容。
这一切都在我的员工 class 内。
public Employee(Authenticate identity)
{
if (identity.IsAuthenticated)
{
// if the account exists, build the employee object
loadEmployee(identity as IIdentity);
}
else
{
// If the account cannot be found in Active Directory, throw an exception
throw new ArgumentOutOfRangeException(identity.Name, "Employee does not exist");
}
}
private void loadEmployee(IIdentity identity)
{
// the domain name of the identity
string domain = identity.Name.Split('\')[0];
// the username of the identity
string username = identity.Name.Split('\')[1];
// Initializes a new context for the identity's domain
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain);
// Initialize a principal using the domain context and the username of the identity
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, username);
// Build a collection of all the underlying objects
var userProperties = ((DirectoryEntry)user.GetUnderlyingObject()).Properties;
// populate the employee objects properties
LastName = user.Surname;
FirstName = user.GivenName;
NtUserName = username;
GUID = user.Guid.ToString();
}
在我的 AuthenticationFilter class 中,我构建了我的 IPrincipal。
//build the system's Identity and Principal
var genIdentity = new GenericIdentity(employee.FirstName + " " + employee.LastName);
var genPrincipal = new GenericPrincipal(genIdentity, roles[]);
var identity = (IPrincipal)genPrincipal;
context.User = identity;
希望这符合您的要求。
我习惯于创建内部 asp.net windows 身份验证应用程序,这些应用程序会自动填充一个 Windows 主体,该主体拥有关于用户名和一些组信息的声明,我认为这些信息来自 Active目录。我安装了 Visual Studio 2015 并尝试使用 ASP.NET 5 网络应用程序,但 Windows 身份验证显示为灰色。我一直在学习基于声明的身份验证,也了解 ASP.NET 5 将带给 table 的跨平台功能,我可能需要摆脱 windows 身份验证。
虽然这个内部 Web 应用程序位于 Active Directory 域中,但我不想在不需要时向用户询问凭据,因为这将在 IIS 之上进行。 应该如何获取当前用户?我是否需要选择不同的身份验证方法并以某种方式通过其他方法从 AD 获取声明,或者 windows 身份验证仍然是这种情况的推荐选项并且最终会可用?
我还没有玩过 v5,但我在我的 Intranet 应用程序中使用 windows 身份使用 SSO。您是否尝试过 GenericPrincipal?现在我很好奇,需要和我的雇主谈谈测试 .NET 5...
使用 GenericPrincipal 和 IIdentity,您可以从登录 Windows 的用户的活动目录中获取任何内容。
这一切都在我的员工 class 内。
public Employee(Authenticate identity)
{
if (identity.IsAuthenticated)
{
// if the account exists, build the employee object
loadEmployee(identity as IIdentity);
}
else
{
// If the account cannot be found in Active Directory, throw an exception
throw new ArgumentOutOfRangeException(identity.Name, "Employee does not exist");
}
}
private void loadEmployee(IIdentity identity)
{
// the domain name of the identity
string domain = identity.Name.Split('\')[0];
// the username of the identity
string username = identity.Name.Split('\')[1];
// Initializes a new context for the identity's domain
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain);
// Initialize a principal using the domain context and the username of the identity
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, username);
// Build a collection of all the underlying objects
var userProperties = ((DirectoryEntry)user.GetUnderlyingObject()).Properties;
// populate the employee objects properties
LastName = user.Surname;
FirstName = user.GivenName;
NtUserName = username;
GUID = user.Guid.ToString();
}
在我的 AuthenticationFilter class 中,我构建了我的 IPrincipal。
//build the system's Identity and Principal
var genIdentity = new GenericIdentity(employee.FirstName + " " + employee.LastName);
var genPrincipal = new GenericPrincipal(genIdentity, roles[]);
var identity = (IPrincipal)genPrincipal;
context.User = identity;
希望这符合您的要求。