使用IISExpress或HttpSys,aspnet核心中的Windows身份验证是不可预测的

时间:2018-03-19 20:24:26

标签: authentication asp.net-core iis-express

在我的asp.net核心网络应用程序中,我需要为发出请求的用户找到登录名。这是在中间件中使用来自HttpContext的名称声明完成的。

public static string GetUserName(HttpContext ctx)
{
    var claim = ctx.User.FindFirst(ClaimTypes.NameIdentifier);
    if (claim != null)
        return claim.Value;

    claim = ctx.User.FindFirst(ClaimTypes.Name);

    var arr = claim?.Value.Split('\\');
    return arr?[arr.Length - 1];
}

有时 Context.User.UserClaims为空。看起来这种情况主要发生在多个请求几乎同时发生时。对于其中一些请求,索赔是空的,而有些则不是。

它永远不会发生在IIS下,但确实发生在IISExpress和HttpSys下。我希望有人知道它为什么会这样。

这是我的launch.json

{
    "iisSettings": {
        "windowsAuthentication": true,
        "anonymousAuthentication": true,
        "iisExpress": {
            "applicationUrl": "http://localhost:5000/",
            "sslPort": 0
        }
    },
    "profiles": {
        "IIS Express": {
            "commandName": "IISExpress",
            "environmentVariables": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "use64Bit": true
        },
        "HttpSys": {
            "commandName": "Project",
            "launchBrowser": false,
            "environmentVariables": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            }
        }
    }
}

0 个答案:

没有答案