.net core 5 Windows 身份验证和 Active Directory 资源
.net core 5 Windows Authentication and Active Directory resources
大家好,只是一个没有代码的直截了当的问题。我正在努力寻找简单问题的基本答案。
我到底应该如何使用 windows 身份验证(未集成 windows 身份验证)与活动目录进行身份验证,然后再进行授权?你可能会认为会有一百万个示例项目,但我的 .net core 搜索结果中有 80% 都是旧的 asp.net 文章,这些文章已经过时并且不适用于新版本。
我这里有很多工作示例,但它们都使用 System.Web classes/libraries 的旧版本,现在都已弃用,不再对我有用。
我从较旧的 asp.net 项目中获得的代码和方法在其他方面看起来都非常简单,我很困惑为什么我找不到任何类似的 .net 核心?在我阅读的大多数文章中,一切都是一些利基第三方包,而我只是想以普通的 Microsoft 方式来做,我发现很难相信没有针对 AD 的登录屏幕和身份验证的简单解决方案。 Microsoft 文档感觉它们是针对专家的,他们得到一个小提示并确切地知道该怎么做。
我是一名新毕业的研究生,只工作了 4 个月,是 .net 核心的新手。
我了解了 LDAP、声明、委托人、cookie 和更多的兔子洞,但对所有不同版本的 .net 及其 classes/libraries 等感到比任何事情都更加困惑。
有一个 nuget 可以处理这个; System.DirectoryServices.AccountManagement
只有Windows,有一个新的ldap版本我觉得是跨平台的
验证:
using (var ctx = new PrincipalContext(ContextType.Domain))
{
if (!ctx.ValidateCredentials(user_name, password))
throw new Exception("unknown username or password");
using (var userPrinciple = new UserPrincipal(ctx)) {
userPrinciple.SamAccountName = user_name;
using (var search = new PrincipalSearcher(userPrinciple))
{
UserPrincipal user = (UserPrincipal) search.FindOne();
if (user == null) {
throw new Exception("user authenticated but not found in directory");
}
return user; // auth'ed user
}
}
}
授权(按群组成员):
using (var ctx = new PrincipalContext(ContextType.Domain))
{
using (var groupPrinciple = new GroupPrincipal(ctx))
{
groupPrinciple.SamAccountName = groupName;
using (var search = new PrincipalSearcher(groupPrinciple))
{
member_list = GetMembersOfPrincipalGroup((GroupPrincipal)search.FindOne());
}
// member_list contains all the users of a group.
// I cache these in a Dictionary for faster group membership checks
}
}
请注意,ContextType 枚举处理本地计算机用户以及域。
在 nuget 包中搜索更多示例。
大家好,只是一个没有代码的直截了当的问题。我正在努力寻找简单问题的基本答案。
我到底应该如何使用 windows 身份验证(未集成 windows 身份验证)与活动目录进行身份验证,然后再进行授权?你可能会认为会有一百万个示例项目,但我的 .net core 搜索结果中有 80% 都是旧的 asp.net 文章,这些文章已经过时并且不适用于新版本。
我这里有很多工作示例,但它们都使用 System.Web classes/libraries 的旧版本,现在都已弃用,不再对我有用。
我从较旧的 asp.net 项目中获得的代码和方法在其他方面看起来都非常简单,我很困惑为什么我找不到任何类似的 .net 核心?在我阅读的大多数文章中,一切都是一些利基第三方包,而我只是想以普通的 Microsoft 方式来做,我发现很难相信没有针对 AD 的登录屏幕和身份验证的简单解决方案。 Microsoft 文档感觉它们是针对专家的,他们得到一个小提示并确切地知道该怎么做。
我是一名新毕业的研究生,只工作了 4 个月,是 .net 核心的新手。
我了解了 LDAP、声明、委托人、cookie 和更多的兔子洞,但对所有不同版本的 .net 及其 classes/libraries 等感到比任何事情都更加困惑。
有一个 nuget 可以处理这个; System.DirectoryServices.AccountManagement
只有Windows,有一个新的ldap版本我觉得是跨平台的
验证:
using (var ctx = new PrincipalContext(ContextType.Domain))
{
if (!ctx.ValidateCredentials(user_name, password))
throw new Exception("unknown username or password");
using (var userPrinciple = new UserPrincipal(ctx)) {
userPrinciple.SamAccountName = user_name;
using (var search = new PrincipalSearcher(userPrinciple))
{
UserPrincipal user = (UserPrincipal) search.FindOne();
if (user == null) {
throw new Exception("user authenticated but not found in directory");
}
return user; // auth'ed user
}
}
}
授权(按群组成员):
using (var ctx = new PrincipalContext(ContextType.Domain))
{
using (var groupPrinciple = new GroupPrincipal(ctx))
{
groupPrinciple.SamAccountName = groupName;
using (var search = new PrincipalSearcher(groupPrinciple))
{
member_list = GetMembersOfPrincipalGroup((GroupPrincipal)search.FindOne());
}
// member_list contains all the users of a group.
// I cache these in a Dictionary for faster group membership checks
}
}
请注意,ContextType 枚举处理本地计算机用户以及域。 在 nuget 包中搜索更多示例。