Windows 身份验证 - 如何使用代码拒绝用户

Posted

技术标签:

【中文标题】Windows 身份验证 - 如何使用代码拒绝用户【英文标题】:Windows Authentication - How to Deny Users using Code 【发布时间】:2013-08-06 02:38:42 【问题描述】:

我的 Windows 身份验证正在使用 IIS7,但现在我想根据我在 SQL Server 中的数据拒绝特定用户。

我知道我可以发送信息访问被拒绝,但我想向用户发送 windows 登录表单以输入不同的凭据,以便 IIS 可以验证新凭据并将其发送到 c# 以再次授权用户。

编辑 - 重新表述问题

我想同时使用 Windows 身份验证和基于数据库数据的身份验证。首先,我希望通过 Windows 身份验证对用户进行身份验证,然后应用程序将对用户进行身份验证。但我的问题是,如果应用程序拒绝用户,那么我希望 Windows 身份验证对话框向用户显示 Windows 凭据以从头开始进程。

【问题讨论】:

我说对了吗,您不想使用 Windows 身份验证(域用户),而只想使用数据库中的数据来验证用户?还是两者兼而有之? @Kai Hartmann 我想要两者的混合。我想通过 Windows 身份验证验证用户,然后我将根据数据库中的数据进行身份验证,但如果我拒绝用户,那么我希望浏览器要求不同的 Windows 凭据并从头开始处理 嗯,这可能会有所帮助:mvolo.com/… @Kai 我不喜欢在身份验证中使用第三方模块 我同意,我认为这篇文章可能会提供一些提示如何解决这个问题。但我认为这可能会有所帮助:以下链接中的文章描述了如何使用表单身份验证,并在服务器端模拟域用户。根据 Windows 系统检查该用户的凭据。所以它使用表单身份验证和使用域用户。 visualstudiomagazine.com/articles/2004/05/01/… 【参考方案1】:

如果您想使用数据库中的信息进行身份验证,则必须使用表单身份验证。 您必须采取的步骤是:

构建登录网页(本例中为 login.aspx) 将其放入您的 web.config 中,以指定登录页面并最初拒绝所有用户的访问:

代码:

<authentication mode="Forms">
  <!-- Login.aspx is the login page forms authentication should use. -->
  <forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH" timeout="30" slidingExpiration="true" >
  </forms>
</authentication>
<authorization>
  <!-- deny all users access to ressources of this app, if not logged in. -->
  <deny users="?" />
</authorization>
在您的登录页面中,在后面的代码中,调用此命令让用户通过:

代码:

FormsAuthentication.SetAuthCookie("UserName", False)

【讨论】:

我想要两者的混合【参考方案2】:

您可以执行的一种方法是创建自己的登录表单并使用 LDAP 查询验证用户身份。

所以最初它通过 Windows 身份验证对用户进行身份验证,如果其他条件不满足用户访问权限,您可以发送自己的登录表单并使用 LDAP 查询对用户进行身份验证。

【讨论】:

以上是关于Windows 身份验证 - 如何使用代码拒绝用户的主要内容,如果未能解决你的问题,请参考以下文章

JetBrain Rider,使用带有 Windows 身份验证的 IIS Express 时访问被拒绝

如何从 PHP Ratchet WebSocket 拒绝未经身份验证的用户?

React/Rebase/Firebase 警告:权限被拒绝 - 如何添加用户身份验证?

当用户的 AD 身份验证失败时如何导航到自定义访问被拒绝页面(.net 3.1 核心与 OpenIDConnect Azure AD 身份验证)

成功身份验证后,Flutter Firebase 数据库权限被拒绝

Spring Boot:Oauth2:访问被拒绝(用户是匿名的);重定向到身份验证入口点