ASP.NET核心检测MacOS用户
ASP.NET Core detecting Mac OS user
我使用带有 windows 身份验证的 VS2015 创建了一个 .Net Core RC2 Web 应用程序。
然后我将项目复制到 Mac OSX El Capitan 并使用终端启动应用程序。
该应用程序按预期启动,但是,由于该应用程序在我的 Mac 上 运行,因此没有 Windows 用户可显示。
如何 return Mac 用户并显示姓名?
这对 Linux 用户也很有用。
获取访问该网站的用户的用户名
您可能会想到 IIS 的 "Windows Authentication" 功能。 IIS 做了一些魔术来根据 Windows 域对访问该网站的用户进行身份验证,然后将该 Windows 身份验证令牌转发给 ASP.NET 核心。 ASP.NET 核心只能在使用 IIS(或 IIS Express)托管并使用 IIS 集成中间件时使用此功能。参见 https://github.com/aspnet/IISIntegration。由于 IIS 仅为 Windows,这意味着在 Linux 或 OSX.
上托管网站时无法获取客户端用户名
获取托管 Web 服务器的帐户的用户名
从 .NET Core 1.0 开始,没有跨平台 API 直接获取用户名。如果您在 windows 上,System.Security.Principal.WindowsIdentity
有效,但这将在 Linux/macOS 上抛出 PlatformNotSupported
。
按照惯例,许多系统在环境变量中设置用户名。您可以使用 System.Environment
来获取它。
var username = Environment.GetEnvironmentVariable("USERNAME") ??
Environment.GetEnvironmentVariable("USER");
另一种更复杂的方法是 p/invoke 本地系统调用 return 用户信息,例如 getpwuid_r
(参见 Linux and OSX 的手册页.)
我使用带有 windows 身份验证的 VS2015 创建了一个 .Net Core RC2 Web 应用程序。
然后我将项目复制到 Mac OSX El Capitan 并使用终端启动应用程序。
该应用程序按预期启动,但是,由于该应用程序在我的 Mac 上 运行,因此没有 Windows 用户可显示。
如何 return Mac 用户并显示姓名?
这对 Linux 用户也很有用。
获取访问该网站的用户的用户名
您可能会想到 IIS 的 "Windows Authentication" 功能。 IIS 做了一些魔术来根据 Windows 域对访问该网站的用户进行身份验证,然后将该 Windows 身份验证令牌转发给 ASP.NET 核心。 ASP.NET 核心只能在使用 IIS(或 IIS Express)托管并使用 IIS 集成中间件时使用此功能。参见 https://github.com/aspnet/IISIntegration。由于 IIS 仅为 Windows,这意味着在 Linux 或 OSX.
上托管网站时无法获取客户端用户名获取托管 Web 服务器的帐户的用户名
从 .NET Core 1.0 开始,没有跨平台 API 直接获取用户名。如果您在 windows 上,System.Security.Principal.WindowsIdentity
有效,但这将在 Linux/macOS 上抛出 PlatformNotSupported
。
按照惯例,许多系统在环境变量中设置用户名。您可以使用 System.Environment
来获取它。
var username = Environment.GetEnvironmentVariable("USERNAME") ??
Environment.GetEnvironmentVariable("USER");
另一种更复杂的方法是 p/invoke 本地系统调用 return 用户信息,例如 getpwuid_r
(参见 Linux and OSX 的手册页.)