为非Web请求设置标识

时间:2011-02-16 21:10:28

标签: c# asp.net

我想为非网络请求设置标识。目前我正在使用FormsAuthentication,我通过此 User.Identity.Name 获取用户身份。现在我必须让用户通过API登录。我有用户的用户名/密码,我该如何为此设置身份。

2 个答案:

答案 0 :(得分:1)

在非Web环境中,标识在线程上设置,可以通过以下方式访问:

Thread.CurrentPrincipal.Identity

您可以使用它来操纵身份,或者像Vadim建议的那样,使用您自己的自定义主体完全覆盖。

此代码段摘自System.Web.Security.Membership类,该类与Web和非Web环境中的主体一起使用,并说明两者如何一起使用。

public static string GetCurrentUserName()
{
    if (HostingEnvironment.IsHosted)
    {
        HttpContext current = HttpContext.Current;
        if (current != null)
        {
            return current.User.Identity.Name;
        }
    }
    IPrincipal currentPrincipal = Thread.CurrentPrincipal;
    if ((currentPrincipal != null) && (currentPrincipal.Identity != null))
    {
        return currentPrincipal.Identity.Name;
    }
    return string.Empty;
}

答案 1 :(得分:0)

您需要创建自己的IPrincipal和IIdentity实现,然后在经过身份验证后将其分配给HttpContext.User。