相关疑难解决方法(0)

Windows 服务中托管的 Kestrel 的 Windows 身份验证

我正在运行托管在 Windows 服务中的 ASP.NET Core 应用程序,如下所述:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.1

我需要此应用程序来支持 Windows 身份验证。我有哪些选择?我尝试在 IIS 中使用应用程序请求路由/URL 重写模块作为 Windows 身份验证的反向代理,但无法弄清楚如何使其工作。任何指导将不胜感激。

.net windows-services kestrel-http-server asp.net-core

12
推荐指数
3
解决办法
1万
查看次数

使用 Docker 进行 ASP.NET Core Windows 身份验证

我正在尝试按照此答案中的步骤创建一个在 docker 上运行并具有 Windows 身份验证的 asp.net core Web 应用程序。

我已将项目上传到谷歌驱动器,如果您想下载它:谷歌驱动器链接

项目信息:

  • ASP.Net 核心 Web 应用程序
  • .net 5.0框架
  • 窗口身份验证
  • 码头工人支持(Linux)
  • 在 Windows 10 上使用 Visual Studio 2019 社区 (16.10.2) 创建。

我的步骤:

  • 添加了 HomeController + 视图
  • 安装Microsoft.AspNetCore.Authentication.Negotiate
  • 添加services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();ConfigureServices
  • 添加app.UseAuthentication();Configure

行为(调试模式,docker):

我可以在不输入我的凭据的情况下进入应用程序并且User.Identity.Name为空。我Microsoft.AspNetCore.Authorization.AuthorizeAttribute在家庭控制器上添加了该属性,因此现在我可以输入我的凭据,但是一旦我收到以下错误:

GssApiException:GSSAPI 操作失败并出现错误 - 未指定的 GSS 故障。次要代码可能会提供更多信息(Keytab FILE:/etc/krb5.keytab 不存在或为空)。

Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler.HandleRequestAsync() Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler.HandleRequestAsync() Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext 上下文) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext语境)

我不确定问题是什么(或者这是否是正确的方法),所以我希望了解一些关于如何做到这一点的观点。我在下面包含了该项目的相关文件。

启动.cs

using Microsoft.AspNetCore.Authentication.Negotiate;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc docker asp.net-core

5
推荐指数
0
解决办法
4606
查看次数

Gss 故障 - Docker 中的 Dotnet 5 和 Windows Auth

我在 dotnet 5 项目中的 Windows 身份验证方面苦苦挣扎了几天,但无法让它在 Docker 环境中工作。在Windows系统本地运行时,可以正常运行。我发现了其他主题,这些主题可能是重复的,但它们与 .net core 3.1 相关,而不是 dotnet 5。

在控制器中执行需要 Windows 身份验证的方法的结果: 结果

我遵循官方文档: https://learn.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth ?view=aspnetcore-5.0&tabs=visual-studio#kestrel

让我解释一下,到目前为止我做了什么。首先在 dotnet 项目中:

  • services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
  • 以防万一我添加了一个额外的没有[Authorize]属性的简单控制器,它当然在 Docker 中工作正常。实际上没有任何意义,但这只是让我确信它正在发挥作用。

除了 dotnet 代码之外

  • 我为我的公司域生成了 krb5.conf 文件并将其复制到 docker 映像中。它工作正常,因为我可以在 shell 中使用 kinit 并成功登录。不幸的是,我无法在这里分享这个文件。我在执行klist时看到有效的票证

克利斯特

  • 使用 ktutil生成用户名.keytab 文件
ktutil 
ktutil: add_entry -password -p myUserName@MY.COMPANY.LOCAL -k 1 -e RC4-HMAC
# ktutil prompts for a password
ktutil: write_kt myUserName.keytab
ktuilt: exit
Run Code Online (Sandbox Code Playgroud)
  • 泊坞窗文件
FROM company-custom-docker-image-with-dotnet-5 AS build
WORKDIR /app

COPY . ./
RUN dotnet …
Run Code Online (Sandbox Code Playgroud)

kerberos windows-authentication docker .net-core

5
推荐指数
1
解决办法
2592
查看次数