sách gpt4 ai đã đi

Xác thực Windows hoạt động trong IIS nhưng không hoạt động trong Kestrel/Microsoft.AspNetCore.Authentication.Negotiate (không hoạt động trong Chrome, đôi khi trong Edge, nhưng luôn hoạt động trong IE)?

In lại 作者:行者123 更新时间:2023-12-01 03:04:28 38 4
mua khóa gpt4 Nike

我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Razor 组件 ( ...\BlazorApp1\BlazorApp1\Shared\LoginDisplay.razor ).


Hello, @context.User.Identity.Name!


如果使用 Kestrel 运行,则不会显示该消息。所以我尝试了以下 Các bước 使其在 Kestrel 中工作。
  • 导入 NuGet 包 Microsoft.AspNetCore.Authentication.Negotiate
  • hiện hữuConfigureService()中添加以下代码在 Startup.cs .
  •     services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
  • hiện hữuConfigure()中添加以下代码在 Startup.cs .它们添加在 app.UseRouting(); 之间和 app.UseEndpoints(... ;
  •             app.UseAuthentication();
    app.UseAuthorization();

    它仍然不显示 Hello 消息。我读到“允许匿名请求。使用 ASP.NET Core 授权来挑战匿名身份验证请求。”在 tài liệu ,所以我做了以下操作来禁用匿名请求。

    hiện hữu _Host.cshtml , 在 @namespace BlazorApp1.Pages 之后添加以下几行.
    @using Microsoft.AspNetCore.Authorization
    @attribute [Authorize]

    但是,消息还是不显示?这是否意味着授权不起作用?

    làm mới:

    我更新了文件 ...\BlazorApp1\BlazorApp1\Shared\LoginDisplay.razorđến


    Hello, @context.User.Identity.Name!


    You are not authorized to view that page...



    它显示“您无权查看该页面...”。似乎 Windows 身份验证不起作用?

    更新2:

    文档中提到了以下内容。

    Windows environment configuration The Microsoft.AspNetCore.Authentication.Negotiate component performs User Mode authentication. Service Principal Names (SPNs) must be added to the user account running the service, not the machine account. Execute setspn -S HTTP/mysrevername.mydomain.com myuser in an administrative command shell.



    我尝试在家里的个人电脑上的管理员 powershell 控制台中运行以下命令。
    setspn -S HTTP/mypcname myusername

    然而,它得到了错误
    PS C:\WINDOWS\system32> setspn -S HTTP/desktop8930 nkucw
    Ldap Error(0x51 -- Server Down): ldap_connect
    Failed to retrieve DN for domain "" : 0x00000051
    Warning: No valid targets specified, reverting to current domain.
    FindDomainForAccount: Call to DsGetDcNameWithAccountW failed with return value 0x0000054B
    Unable to locate account nkucw

    这是输出:( 它在日志中显示“授权成功。”几次 ,但最后一次显示授权失败)

    信息:Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
    用户资料可用。使用“C:\Users\nkucw\AppData\Local\ASP.NET\DataProtection-Keys”作为 key 存储库和 Windows DPAPI 来加密静态 key 。
    信息:Microsoft.Hosting.Lifetime[0]
    现在收听:https://localhost:5001
    信息:Microsoft.Hosting.Lifetime[0]
    现在监听:http://localhost:5000
    信息:Microsoft.Hosting.Lifetime[0]
    应用程序启动。按 Ctrl+C 关闭。
    信息:Microsoft.Hosting.Lifetime[0]
    托管环境:开发
    信息:Microsoft.Hosting.Lifetime[0]
    内容根路径:C:\Users\nkucw**strong text**\source\repos\TestPS\BlazorApp1
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求启动 HTTP/1.1 GET https://localhost:5001/
    信息:Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
    授权失败。
    信息:Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler[12]
    AuthenticationScheme:协商受到质询。
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 135.0172ms 401 内完成
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求启动 HTTP/1.1 GET https://localhost:5001/
    信息:Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler[0]
    没有任何
    信息:Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler[1]
    不完整的协商握手,发送额外的 401 协商挑战。
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 16.6473ms 401 内完成
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求启动 HTTP/1.1 GET https://localhost:5001/
    信息:Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler[0]
    没有任何
    信息:Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[1]
    授权成功。
    信息:Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
    执行端点'/_Host'
    信息:Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker[3]
    路由与 {page = "/_Host"} 匹配。执行页面/_Host
    信息:Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker[103]
    执行隐式处理程序方法 - ModelState 有效
    信息:Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker[104]
    执行隐式处理程序方法,返回结果 Microsoft.AspNetCore.Mvc.RazorPages.PageResult。
    信息:Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[1]
    授权成功。
    信息:Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker[4]
    在 206.51090000000002ms 内执行页面/_Host
    信息:Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
    执行端点'/_Host'
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 270.6847ms 200 text/html 内完成;字符集=utf-8
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求启动 HTTP/1.1 GET https://localhost:5001/css/bootstrap/bootstrap.min.css
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求开始 HTTP/1.1 GET https://localhost:5001/css/site.css
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求启动 HTTP/1.1 GET https://localhost:5001/_framework/blazor.server.js
    信息:Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[6]
    文件/css/site.css 未被修改
    信息:Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[6]
    文件/_framework/blazor.server.js 未修改
    信息:Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[6]
    文件/css/bootstrap/bootstrap.min.css 未被修改
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 26.105700000000002ms 304 text/css 内完成
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 21.6629ms 304 application/javascript 内完成
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 21.6629ms 304 text/css 内完成
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求开始 HTTP/1.1 GET https://localhost:5001/css/open-iconic/font/css/open-iconic-bootstrap.min.css
    信息:Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[6]
    文件/css/open-iconic/font/css/open-iconic-bootstrap.min.css 未修改
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 7.1119ms 内完成 304 text/css
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求开始 HTTP/1.1 POST https://localhost:5001/_blazor/negotiate text/plain;charset=UTF-8 0
    信息:Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
    执行端点'/_blazor/negotiate'
    信息:Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
    执行端点'/_blazor/negotiate'
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 22.780900000000003ms 200 application/json 内完成
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求开始 HTTP/1.1 GET https://localhost:5001/css/open-iconic/font/fonts/open-iconic.woff
    信息:Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[6]
    文件/css/open-iconic/font/fonts/open-iconic.woff 没有被修改
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[1]
    请求开始 HTTP/1.1 GET https://localhost:5001/_blazor?id=ase9fodeUXavBCDTwk1Suw
    信息:Microsoft.AspNetCore.Hosting.Diagnostics[2]
    请求在 7.676900000000001ms 304 application/font-woff 内完成
    信息:Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
    执行端点'/_blazor'
    信息:Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
    授权失败。


    更新3:

    发现它在 Edge 中有效,但在 Chrome 中无效。是服务器端 Blazor 的错误吗?

    更新4:

    即使使用Edge,不断刷新页面表明它有时可能无法获得身份验证。

    1 Câu trả lời

    我在处理类似问题时发现了您的问题 issue .我想我知道您的问题的答案 - 您可以使用一个简单的中间件来挑战身份验证并显示登录信息。

  • 将此添加到您的配置方法中:
  • app.UseMiddleware();
  • 这是中间件本身:
  • internal class ValidateAuthentication : IMiddleware
    {
    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
    if (context.User.Identity.IsAuthenticated)
    await next(context);
    khác
    await context.ChallengeAsync();
    }
    }
  • 在 ConfigureServices 中:
  •  services.AddSingleton();

    您不应该需要构造函数。

    关于asp.net - Windows 身份验证适用于 IIS,但不适用于 Kestrel/Microsoft.AspNetCore.Authentication.Negotiate(不在 Chrome 中,有时在 Edge 中,始终在 IE 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59111331/

    38 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com