在ASP.NET Core中检索ServerVariables

时间:2019-02-25 18:10:04

标签: asp.net

我已经实现了IdentityServer4。该应用程序正在运行ASP.NET Core。托管环境位于IIS上。我正在使用Shibboleth对网站执行预身份验证。这将在IIS中填充许多服务器变量。 (我们不能在我们的环境中使用HTTP标头,所有操作都必须使用ServerVariables完成)

我想获取服务器变量'AUTH_USER'或'REMOTE_USER'。

在旧版ASP或ASP.NET中,这就像调用Request.ServerVariable(“ AUTH_USER”)一样简单。这在ASP.NET Core中已更改。

我尝试过 ClaimsPricipal-> User.Identity.Name,(用户名为空,IsAuthenticated为false)

我已经确认服务器变量实际上已设置。

This question is similar to this question but doesn't answer the question

2 个答案:

答案 0 :(得分:2)

在Asp.Net Core 3中,GetServerVariable上有一个扩展方法HttpContext

要使用它,您需要安装Microsoft.AspNetCore.Http.Extensions NuGet软件包,并且实际方法在Microsoft.AspNetCore.Http.HttpContextServerVariableExtensions类中。

请注意,服务器必须支持它,否则它将返回null

对于早期版本的ASP.Net Core,您可以通过调用context.Features.Get<IServerVariablesFeature>()

来使用context属性的features属性。

答案 1 :(得分:2)

.NET (Core) 团队在上一个版本中对此进行了多次更改。我无法通过上下文功能使 HttpContextServerVariableExtensions 版本和旧变体正常工作。

但是this gist帮助了我。可与 AWS fargate 上的 .NET 5 配合使用,可能具有某种负载均衡器直通功能。

aws-sdk

我假设您可以从标题中获取任何这样的值。 public static class HttpContextExtensions { //https://gist.github.com/jjxtra/3b240b31a1ed3ad783a7dcdb6df12c36 public static IPAddress GetRemoteIPAddress(this HttpContext context, bool allowForwarded = true) { if (allowForwarded) { string header = (context.Request.Headers["CF-Connecting-IP"].FirstOrDefault() ?? context.Request.Headers["X-Forwarded-For"].FirstOrDefault()); if (IPAddress.TryParse(header, out IPAddress ip)) { return ip; } } return context.Connection.RemoteIpAddress; } } 。请注意,您无法在本地调试标头。由于我的本地设置不同,我没有看到这些条目。我看到了可用的魔法字符串,例如here