基于IIS、ASP.NET 5和Microsoft SQL Server的自动Windows身份验证



有很多相关信息,我希望我不会忘记任何事情。我们希望通过Windows自动登录到我们域中的intranet网站。为了在客户端上进行测试,我使用了一个chrome浏览器,该浏览器已将网站列入白名单。服务器运行IIS 10.0.19041版本,运行ASP.NET 5网站。它连接到同一域中的数据库MS SQL Server。Connection String的参数为Integrated Security=SSPI,可与客户端上本地运行的应用程序配合使用。

这就是目前的情况:通常网站会要求提供凭据,但由于它在白名单中,我认为它现在使用的是Windows凭据,这里是如何解释的https://stackoverflow.com/a/24875309/15631999

using (SqlConnection Verbindung = new SqlConnection(sqlConnectString))
{
Verbindung.Open();

";用户"登录失败";抛出错误,因为它试图连接到活动的Web服务器用户,而不是自动登录的客户端System.Security.Principal.WindowsIdentity.GetCurrent().Name返回AppPool中的帐户标识。

我们所做的:(可能并不都是相关的…(

在过去的几天里,我们在谷歌上搜索了很多,想知道该怎么办。一般的关键词似乎是Windows身份验证,可能是模拟,NTLM。因此,我们将身份验证添加到ConfigureServices中。现在看起来是这样的:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews()
.AddXmlSerializerFormatters()
.AddXmlDataContractSerializerFormatters();
services.AddAuthentication(Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.Ntlm);
services.AddSession();
services.AddAuthorization(options =>
{
options.AddPolicy("AuthorizationMode", (policy) =>
{
//unauthenticated
policy.RequireAssertion((e) => true);
});
});
//services.AddMvc();
services.AddHttpContextAccessor();
}

我们也尝试了IISDefaults.AuthenticationScheme和未经授权。

配置函数片段:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
SessionOptions s = new SessionOptions();
s.IdleTimeout = System.TimeSpan.FromMinutes(30);
s.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Lax;
s.Cookie.Name = ".acclaro.de.Session";
s.Cookie.IsEssential = true;
app.UseSession(s);

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
(...)

在IIS/Sites/[网站]/身份验证中,我们禁用了匿名身份验证并启用了Windows身份验证。这意味着,我想,我不必编辑web.config。

我们在启用和禁用模拟的情况下都进行了尝试。基本身份验证似乎总是要求用户名和密码。所以这不是我们想要的。

我们读到我必须更改提供商的顺序。将协商置于NTLM下,或者彻底删除它不会改变任何事情。

我还读到我必须添加SPN。所以我在域控制器上执行了setspn -a http/[url] [domain controller computer name]

我不知道我错过了什么。也许我只是还没有尝试正确的组合。如果有人能帮忙,我们将不胜感激。(此外,我希望当我在服务器上的本地临时文件夹中写作时,模拟其他用户不会产生问题。我过去曾遇到过一些拒绝访问的异常。(

如果缺少一些相关信息,请告诉我。

人们普遍误解Windows身份验证意味着模拟。当用户使用Windows集成身份验证对服务器进行身份验证时,服务器上的代码不会自动作为该用户运行

企业级web应用程序的正常配置是IIS到用户的Windows身份验证,以对用户进行身份验证,但使用IIS应用程序池标识连接到SQL Server。

如果您希望用户以自己的身份通过web应用程序连接到SQL Server,则称为"连接";模拟;你需要启用和配置它。这里有一个SO问题,展示了如何在中间件中执行模拟。但可能需要额外的协商,如Kerberos约束委派配置。

这样做的缺点是

  1. 这是一项额外的配置工作,您可能需要网络管理员的帮助。

  2. 如果用户可以通过应用程序直接连接到数据库,他们也可以通过其他工具连接。因此,安全管理更加困难,风险也更大。

  3. 用户无法重用连接,因此会有很多空闲连接。

最新更新