我使用带有Windows身份验证的VS2015创建了一个.Net Core RC2 Web应用程序。
然后我将项目复制到Mac OSX El Capitan并使用终端启动了应用程序。
应用程序按预期启动,但是,由于应用程序在我的Mac上运行,因此无法显示Windows用户。
如何退回Mac用户并显示名称?
这对Linux用户也很有用。
答案 0 :(得分:7)
获取访问该网站的用户的用户名
您可能正在考虑IIS的“Windows身份验证”功能。 IIS对于针对Windows域访问网站的用户进行身份验证并将该Windows身份验证令牌转发到ASP.NET Core有一定的魔力。 ASP.NET Core只能在使用IIS(或IIS Express)托管并使用IIS Integration中间件时使用此功能。见https://github.com/aspnet/IISIntegration。由于IIS仅限Windows,这意味着在Linux或OSX上托管网站时无法获得客户端用户名。
获取托管网络服务器的帐户的用户名
从.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返回有关用户信息的本机系统调用,例如getpwuid_r
(请参阅Linux和OSX的手册页。)