.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 包中搜索更多示例。