【发布时间】:2015-03-20 02:36:25
【问题描述】:
我正在开发一个 ASP.NET MVC 应用程序。我需要支持多种身份验证机制(这个应用程序被多个客户使用,每个客户都有自己首选的身份验证提供商)。一个身份验证提供程序将是 Active Directory。用于身份验证的 AD 集成很简单,我对此没有任何问题。
对于授权,角色将存储在本地数据库中(注意:我们不能使用 Active Directory 组进行授权 - 角色需要是本地应用程序角色,因为我们支持多个身份验证提供程序并且 AD 管理员不想创建自定义AD 中的组仅适用于我们的应用程序)。我的期望是,我们需要在本地数据库中创建“存根”用户帐户,以便执行 User-is-assigned-which-Roles 映射。这些存根用户帐户还将用于指示哪些用户有权访问应用程序(不是 AD 数据库中的每个人都应该有权访问)。
预期的控制流程将是:
- 用户访问登录页面 > 输入凭据 > 将凭据发布到应用服务器。
- 应用程序根据 AD 验证凭据。此时,我们知道用户是否通过了身份验证。
- 应用程序检查用户的 SID 以查看本地数据库中是否存在具有该 SID 的“存根”用户帐户。如果没有,应用会向用户显示“未授权”错误消息。
- 应用将在本地数据库 user-is-assigned-which-roles 表中查找用户的角色。
包括角色在内的用户身份信息将存储为声明,应用将使用典型的基于声明的授权(即 ClaimsAuthorizationManager)。
我的问题是在我的本地数据库中创建“存根”用户帐户的最佳方法是什么?我的猜测是我们应该使用某种 AD 导出脚本来为那些应该被授予访问 ASP.NET 应用程序的用户导出 AD 帐户,然后将这些用户导入本地数据库(注意:我希望存根帐户将包含最少的信息 - 可能只是来自 AD 的用户 SID 和 也许 用户名)。
批量导出/导入可能可以作为初始部署过程。在应用程序启动并运行并且新用户加入组织后,我预计将需要一种更加用户友好的机制来授予新用户访问我们应用程序的权限(除了将新用户的帐户从 AD 导出/导入到我们的本地数据库)。我的猜测是我们需要某种用户浏览器屏幕,以便我们应用程序中的管理员可以浏览 AD 目录、选择用户、单击按钮然后拥有该用户的“存根”帐户在我们的应用中自动创建。
是否有人实现了具有类似要求的应用程序?如果是这样,您是如何引导在本地数据库中创建“存根”帐户的?有没有更好的方法来满足这些要求?
【问题讨论】:
标签: asp.net active-directory authorization