我们有一个 asp.net mvc 5 Web 应用程序,标识为 2 asp.net。在活动上下文中,我从"HttpContext.User.Identity.Name"中获取实际用户。
现在,外部服务必须获取有关用户的信息,该用户实际上是通过HTTPGet请求登录的。
我想我可以以相同的方法请求用户名。但是用户始终是字符串.空。我认为这是因为下面的帖子不在同一个 httpcontext 中?!?!
[HttpGet]
[AllowAnonymous]
public ActionResult SupporterIdentity()
{
if (HttpContext.User.Identity.Name == string.Empty || HttpContext.User.Identity.Name == null)
{
return Json(new { success = "false", msg = HttpStatusCode.Unauthorized }, JsonRequestBehavior.AllowGet); ;
}
var appUser = UserManager.FindByNameAsync(HttpContext.User.Identity.Name).Result;
AppAuthentication oa = new AppAuthentication();
oa.Identity = new AppIdentity();
oa.Identity.id = appUser.Id.ToString();
oa.Identity.name = appUser.UserName;
oa.Identity.role = MemberDataIdentityModel.UserRole.ToString(); ;
return Json(oa, JsonRequestBehavior.AllowGet);
}
如何从正确的上下文中获取活动用户?什么是正确的方法?
那么,如果外部进程正在执行GET请求,那么该请求是否应该首先进行身份验证?
如果我登录到您的系统,我会得到一个包含身份验证详细信息的 cookie。这是我的cookie和我的登录信息。其他一些进程可能会在您的/SupporterIdentity
上调用 GET,但该请求与我不同的 cookie 不附带,并且该请求未经过身份验证。因此,对于该过程,没有用户登录,因此您正确地获取String.Empty
而不是用户名。
只需从该操作中删除[AllowAnonymous]
并尝试 - 您应该获得该进程 GET 请求的登录页面。
另一件事 - 您谈论登录用户,就好像永远不应该有 2 个用户同时登录一样。但是可能有很多用户登录。那么GET请求应该返回哪个用户名呢?