gpt4 book ai didi

c# - ASP.NET 将 Windows 身份验证与自定义应用程序组/角色相结合

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:04 26 4
gpt4 key购买 nike

坦白说,我并不完全了解 Windows 身份验证、事件目录和 LDAP 的世界,并且对通过 sql server 处理个人用户帐户的经验也很少。此外,我发现网络上的大多数文档,尤其是 Microsoft 提供的文档,都假定您在纯 Microsoft 世界中进行开发,并且有能力实现最新的以及他们提供的任何解决方案、框架或服务。

我正在开发一个 Intranet 应用程序。由于各种原因,我无法利用 Active Directory 组/角色,但想尽可能地模仿此功能。因此,我需要能够在应用程序内部管理用户/角色/组。但是,我希望能够在此过程中检测到用户的 Windows Auth 凭据。换句话说,我不希望用户必须注册,也不希望他们必须登录,而是使用他们登录时使用的 Windows 帐户。

然后,应用程序托管角色将确定用户将在应用程序中拥有的各种功能。

这是一个 asp.net MVC 应用程序。我最终需要满足以下有关授权的要求。

1) 将当前 Windows 用户与应用程序用户存储和角色进行比较。这个可以用SQL server。

2) 根据用户角色操作功能

3) 允许管理员搜索 AD 并将域\用户添加到商店以及分配组

4)创建组并注册应用程序组件

关于我如何解决或所有这些问题的任何信息都将非常有益。

最佳答案

您正在寻找的是自定义角色提供程序。这是非常容易和简单的事情。只需创建一个继承自 System.Web.Security.RoleProvider 的类。您需要实现的唯一方法是 IsUserInRole 和 GetRolesForUser。您可能只对所有其他方法抛出 NotImplementedException。然后,通过在 System.Web 下设置 roleManager 元素,将其绑定(bind)到 Web.Config 中的应用程序。

public class CustomRoleProvider : RoleProvider
{
private mydatabase db;

public override string ApplicationName { get; set; }

public CustomRoleProvider()
{
db = new mydatabase();
}

public override bool IsUserInRole(string username, string roleName)
{
//This will return the user object.
//To get the username of the logged on user, you can use User.Identity.Name
//To remove the domain name from the username: User.Identity.Name.Split('\\').Last();
var user = db.CurrentUser();

return user.Roles != null
&& user.Roles.Count > 0
&& (user.Roles.Exists(x => x.Roles.RoleNm == roleName));
}

public override string[] GetRolesForUser(string username)
{
var user = db.CurrentUser();

return user.Roles.Select(x => x.Roles.RoleNm).ToArray();
}

#region not implemented

public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}

public override void CreateRole(string roleName)
{
throw new NotImplementedException();
}

public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
throw new NotImplementedException();
}

public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
throw new NotImplementedException();
}

public override string[] GetAllRoles()
{
throw new NotImplementedException();
}

public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}

public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}

public override bool RoleExists(string roleName)
{
throw new NotImplementedException();
}

#endregion
}

然后,在 Web.Config 中

<system.web>
<roleManager defaultProvider="CustomRoleProvider" enabled="true">
<providers>
<clear />
<add name="CustomRoleProvider" type="ThisProject.CustomRoleProvider, ThisProject" />
</providers>
</roleManager>
</system.web>

免责声明:此代码中可能有拼写错误,但您应该能够理解其中的含义

关于c# - ASP.NET 将 Windows 身份验证与自定义应用程序组/角色相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42378016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com