【问题标题】:Retrieve ServerVariables in ASP.NET Core在 ASP.NET Core 中检索 ServerVariables
【发布时间】:2019-02-25 18:10:04
【问题描述】:

我已经实现了 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 为假)

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

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

【问题讨论】:

标签: asp.net


【解决方案1】:

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

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

注意服务器必须支持,否则会返回null

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

【讨论】:

    【解决方案2】:

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

    但是this gist 帮助了我。与 AWS fargate 上的 .NET 5 一起工作,可能需要某种负载均衡器直通。

    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;
        }
    }
    

    我假设您可以从标题中获取任何这样的值。 HttpContext.Request.Headers["X-Forwarded-For"]。请注意,您不能在本地调试标头。由于我的本地设置不同,我没有看到这些条目。我看到了可用的魔术字符串,例如here.

    【讨论】:

      猜你喜欢
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      相关资源
      最近更新 更多