gpt4 book ai didi

c# - 如何使用服务器端 Blazor 启用 Windows 身份验证

转载 作者:行者123 更新时间:2023-12-05 07:16:07 27 4
gpt4 key购买 nike

我有一个 Blazor 服务器端应用程序,它使用 IIS 进行 Windows 身份验证。该应用程序托管在 IIS 上,我已将应用程序池网站的标识更改为系统服务帐户。 (假设它是 Domain\sys_account)。

以下代码在 LoginDisplay.razor 中。它可以显示打开网页的用户的正确身份。

<AuthorizeView>
<Authorized>
@{
var identity = (System.Security.Principal.WindowsIdentity)context.User.Identity;
}
Hello, @identity!
</Authorized>
<NotAuthorized>
You are not authorized.
</NotAuthorized>
</AuthorizeView>

我需要在 C# 代码中获取当前标识。于是创建了下面的类和接口(interface)。

public interface ICurrentUserService
{
string UserId { get; }
}

public class CurrentUserService : ICurrentUserService
{
public CurrentUserService()
{
UserId = WindowsIdentity.GetCurrent().Name;
}

public string UserId { get; }
}

它被添加到服务中作为

    public void ConfigureServices(IServiceCollection services)
{
// ....
services.AddScoped<ICurrentUserService, CurrentUserService>();

但是,在下面的代码中。 _currentUserService.UserIdDomain\sys_account 而不是访问该站点的人的 ID?如何获取当前登录用户的身份?

public class RequestLogger<TRequest> : IRequestPreProcessor<TRequest>
{
private readonly ILogger _logger;
private readonly ICurrentUserService _currentUserService;

public RequestLogger(ILogger<TRequest> logger, ICurrentUserService currentUserService)
{
_logger = logger;
_currentUserService = currentUserService; // _currentUserService.UserId is Domain\sys_account instead of the id of the person who accesses the site?
}

public Task Process(TRequest request, CancellationToken cancellationToken)
{
var name = typeof(TRequest).Name;

_logger.LogInformation("Request: {Name} {@UserId} {@Request}",
name, _currentUserService.UserId, request); // _currentUserService.UserId is Domain\sys_account instead of the id of the person logged in?

return Task.CompletedTask;
}
}

最佳答案

执行以下操作以在适用于 IIS 和 Kestrel 的 Blazor 和 ASP.NET Core Controller 上启用 Windows 身份验证(适用于 ASP.NET Core 3.1 和 ASP.NET 5):

  1. 添加 nuget 引用:

Microsoft.AspNetCore.Authentication.Negotiate

Microsoft.AspNetCore.Components.Authorization

  1. 更新 Startup.cs
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
// Windows authentication may not be applied with Kestrel without this line
services.AddAuthorization(options => options.FallbackPolicy = options.DefaultPolicy);

...

// Add the following below app.UseRouting()
app.UseAuthentication();
app.UseAuthorization();
  1. 其余与使用其他身份验证方法相同。

如果下面提供了一个完整的例子,欢迎加星:)

Blazor and ASP.NET Core controller using Windows authentication

关于c# - 如何使用服务器端 Blazor 启用 Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59400039/

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