gpt4 book ai didi

iis - Asp.Net Core Windows 身份验证在 IIS 中不起作用

转载 作者:行者123 更新时间:2023-12-04 15:29:56 25 4
gpt4 key购买 nike

Asp.Net Core 似乎无法识别调用 context?.User?.Identity?.Name 中的用户当 Windows 身份验证启用并在 IIS Express 或 IIS 中运行时。

期望行为:在 IIS 和/或 IIS Express 中同时启用 Windows 身份验证和匿名身份验证,Asp.Net Core 应自动识别 windows 用户。

实际行为:当我在 IIS 或 IIS Express 中同时启用 Windows 和匿名身份验证时,用户名为空。当我禁用匿名身份验证或调用 HttpContext.ChallengeAsync(IISDefaults.AuthenticationScheme) ,我得到一个我不想要的登录提示。

我的理解是,即使我想将它用于 Active Directory,我也不需要 Active Directory 或域来验证 Windows 用户。

环境:

  • Windows 8.1(不在域上)
  • IIS 8.5/Visual Studio 2017 w/IIS Express
  • 已安装 Windows 身份验证安全功能
  • Windows 身份验证和(使用 NTLM 提供程序)和匿名身份验证已启用
  • 以本地帐户用户身份登录

  • 依赖项:
  • Microsoft.AspNetCore.All 2.0.8

  • 启动:
    public void ConfigureServices(IServiceCollection services)
    {
    services.Configure<IISOptions>(iis =>
    {
    iis.AuthenticationDisplayName = "Windows";
    iis.AutomaticAuthentication = true;
    });

    services.AddAuthentication(IISDefaults.AuthenticationScheme);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    }

    app.UseAuthentication();
    app.Run(async (context) =>
    {
    await context.Response.WriteAsync(JsonConvert.SerializeObject(new
    {
    UserName = context?.User?.Identity?.Name
    }));
    });

    启动设置.json:
    {
    "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,
    "iisExpress": {
    "applicationUrl": "http://localhost:51682/",
    "sslPort": 0
    }
    },
    "profiles": {
    "IIS Express": {
    "commandName": "IISExpress",
    "launchBrowser": true,
    "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
    }
    }
    }
    }

    网络配置:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <system.webServer>
    <handlers>
    <remove name="aspNetCore" />
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore forwardWindowsAuthToken="true" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
    </configuration>

    applicationhost.config:(IIS Express)

    基于这篇文章: https://docs.microsoft.com/en-us/iis/configuration/system.webServer/security/authentication/windowsAuthentication/
    <authentication>
    <anonymousAuthentication enabled="true" userName="" />
    <basicAuthentication enabled="false" />
    <clientCertificateMappingAuthentication enabled="false" />
    <digestAuthentication enabled="false" />
    <iisClientCertificateMappingAuthentication enabled="false"></iisClientCertificateMappingAuthentication>
    <windowsAuthentication enabled="true">
    <providers>
    <add value="NTLM" />
    </providers>
    </windowsAuthentication>
    </authentication>

    最佳答案

    几件事:

  • 当您禁用匿名身份验证时,您会收到一个弹出窗口,因为浏览器可能不信任该站点。您需要打开 Internet 选项(从 Windows 控制面板)-> 安全选项卡-> 单击“受信任的站点”-> 单击“站点”并将 URL 添加到您的站点。 IE 和 Chrome 都使用这些设置来决定是否自动发送您的凭据。
  • 当您同时启用匿名和 Windows 身份验证时,匿名优先,除非您告诉它用户必须登录。为此,请使用 [Authorize]属性要么在 Controller 上,要么仅在单个 Action 上。文档中有更多详细信息,标题为 Allow Anonymous Access。 .
  • 关于iis - Asp.Net Core Windows 身份验证在 IIS 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50400393/

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