Asp.net 核心 Web API - 当前用户和 Windows 身份验证
Asp.net Core Web API - Current user & Windows Authentication
我们的应用程序中有以下技术堆栈
AngularJS2
Asp.Net核心API
SQL 服务器
现在我们需要在 Create/Edit 期间为给定项目在 table 中存储登录用户的用户名,即在核心 API.
中
我们已经尝试过
- WindowsIdentity.GetCurrent().Name,它给IIS APPPOOL\Asp.netCore
- HttpContext.User.Identity给出空值
我在使用 Visual Studio 时使用 Windows 身份获得用户名,但是对于 IIS,它给出的值是 Asp.Net 核心,即池名称
Windows 启用身份验证并禁用匿名身份验证
使用 IIS 版本 6.1
我错过了什么吗?
您是否在 web.config 中将 forwardWindowsAuthToken 设置为 true?
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true"/>
我环顾四周,建议使用 Windows 身份验证创建 Asp.Net 核心 WebApi 应用程序。
因此,当我使用 Windows 身份验证创建 Asp.Net 核心 WebApi 时,它起作用了,我在 User.Identity 个对象中获得了值。
所以我创建了 2 个应用程序,一个有 Windows 身份验证,一个没有,然后比较所有文件并发现以下文件有变化
forwardWindowsAuthToken
- 是的,之前尝试过但问题没有解决,Daboul 也提出了同样的建议
- launchSettings.json, 设置
windowsAuthentication
: true & anonymousAuthentication
: false
完成此操作后,我能够在 User.Identity 对象中设置值。
launchSettings.json 文件:
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false
}
}
Web.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore forwardWindowsAuthToken="true" processPath="C:\Program Files\dotnet\dotnet.exe" arguments=".\YourWebsite.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</configuration>
在 Windows Server 2012 R2/IIS 8.0 上,即使在 web.config 中设置 forwardWindowsAuthToken=true 之后,User.Identity.Name 也没有返回用户名但是 IIS APPPOOL 以便解决我在下面所做的更改的问题;
- 转到 IIS 中的 Web 应用程序
- 打开配置编辑器
- 将部分更改为系统。webServer/serverRuntime
- 将 authenticatedUserOverride 更改为 UseAuthenticatedUser(对我来说它设置为 UseWorkerProcessUser)
详情请见下文link;
https://blogs.iis.net/jaroslad/what-does-the-authenticateduseroverrideuser-do
我们的应用程序中有以下技术堆栈 AngularJS2 Asp.Net核心API SQL 服务器
现在我们需要在 Create/Edit 期间为给定项目在 table 中存储登录用户的用户名,即在核心 API.
中我们已经尝试过
- WindowsIdentity.GetCurrent().Name,它给IIS APPPOOL\Asp.netCore
- HttpContext.User.Identity给出空值
我在使用 Visual Studio 时使用 Windows 身份获得用户名,但是对于 IIS,它给出的值是 Asp.Net 核心,即池名称
Windows 启用身份验证并禁用匿名身份验证
使用 IIS 版本 6.1
我错过了什么吗?
您是否在 web.config 中将 forwardWindowsAuthToken 设置为 true?
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true"/>
我环顾四周,建议使用 Windows 身份验证创建 Asp.Net 核心 WebApi 应用程序。
因此,当我使用 Windows 身份验证创建 Asp.Net 核心 WebApi 时,它起作用了,我在 User.Identity 个对象中获得了值。
所以我创建了 2 个应用程序,一个有 Windows 身份验证,一个没有,然后比较所有文件并发现以下文件有变化
forwardWindowsAuthToken
- 是的,之前尝试过但问题没有解决,Daboul 也提出了同样的建议
- launchSettings.json, 设置
windowsAuthentication
: true &anonymousAuthentication
: false
完成此操作后,我能够在 User.Identity 对象中设置值。
launchSettings.json 文件:
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false
}
}
Web.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore forwardWindowsAuthToken="true" processPath="C:\Program Files\dotnet\dotnet.exe" arguments=".\YourWebsite.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</configuration>
在 Windows Server 2012 R2/IIS 8.0 上,即使在 web.config 中设置 forwardWindowsAuthToken=true 之后,User.Identity.Name 也没有返回用户名但是 IIS APPPOOL 以便解决我在下面所做的更改的问题;
- 转到 IIS 中的 Web 应用程序
- 打开配置编辑器
- 将部分更改为系统。webServer/serverRuntime
- 将 authenticatedUserOverride 更改为 UseAuthenticatedUser(对我来说它设置为 UseWorkerProcessUser)
详情请见下文link; https://blogs.iis.net/jaroslad/what-does-the-authenticateduseroverrideuser-do