tag route net asp c# .net asp.net-mvc iis forms-authentication

c# - net - asp-route



Cómo obtener el usuario actual en ASP.NET MVC (19)

En un modelo de formularios, solía obtener el usuario actual registrado al:

Page.CurrentUser

¿Cómo consigo al usuario actual dentro de una clase de controlador en ASP.NET MVC?


En Asp.net Mvc Identity 2, puede obtener el nombre de usuario actual al:

var username = System.Web.HttpContext.Current.User.Identity.Name;


Encontré que el User funciona, es decir, User.Identity.Name o User.IsInRole("Administrator") .



Intente HttpContext.Current.User .

Propiedad compartida pública actual () como System.Web.HttpContext
Miembro de System.Web.HttpContext

Resumen:
Obtiene o establece el objeto System.Web.HttpContext para la solicitud HTTP actual.

Valores de retorno:
System.Web.HttpContext para la solicitud HTTP actual


Me doy cuenta de que esto es muy viejo, pero acabo de comenzar con ASP.NET MVC, así que pensé en poner mis dos centavos en:

  • Request.IsAuthenticated le dice si el usuario está autenticado.
  • Page.User.Identity le proporciona la identidad del usuario que ha iniciado sesión.

Nombre de usuario con:

User.Identity.Name

Pero si necesita obtener solo la ID, puede usar:

using Microsoft.AspNet.Identity;

Por lo tanto, puede obtener directamente el ID de usuario:

User.Identity.GetUserId();


Para hacer referencia a un ID de usuario creado mediante la autenticación simple incorporada en ASP.NET MVC 4 en un controlador con fines de filtrado (lo cual es útil si está utilizando la base de datos primero y Entity Framework 5 para generar enlaces de código primero y sus tablas están estructuradas de manera que que se utiliza una clave foránea para el ID de usuario), puede usar

WebSecurity.CurrentUserId

una vez que agregue una declaración de uso

using System.Web.Security;


Para lo que vale, en ASP.NET MVC 3 solo puede usar Usuario que devuelve al usuario para la solicitud actual.


Podemos usar el siguiente código para obtener el Usuario actual registrado en ASP.Net MVC:

var user= System.Web.HttpContext.Current.User.Identity.GetUserName();

también

var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give ''Domain//UserName'' Environment.UserName - Will Display format : ''Username''


Puede obtener el nombre del usuario en ASP.NET MVC4 así:

System.Web.HttpContext.Current.User.Identity.Name


Puedes usar el siguiente código:

Request.LogonUserIdentity.Name;


Si está dentro de su página de inicio de sesión, en el evento LoginUser_LoggedIn, por ejemplo, Current.User.Identity.Name devolverá un valor vacío, por lo que debe usar la propiedad yourLoginControlName.UserName.

MembershipUser u = Membership.GetUser(LoginUser.UserName);


Si está trabajando en Active Directory en una intranet, aquí hay algunos consejos:

(Windows Server 2012)

Ejecutar todo lo que habla con AD en un servidor web requiere un montón de cambios y paciencia. Dado que cuando se ejecuta en un servidor web en lugar de IIS / IIS Express local, se ejecuta en la identidad de AppPool, por lo tanto, debe configurarlo para hacerse pasar por quienquiera que llegue al sitio.

Cómo obtener el usuario que inició sesión en un directorio activo cuando su aplicación MVC de ASP.NET se ejecuta en un servidor web dentro de la red:

// Find currently logged in user UserPrincipal adUser = null; using (HostingEnvironment.Impersonate()) { var userContext = System.Web.HttpContext.Current.User.Identity; PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null, ContextOptions.Negotiate | ContextOptions.SecureSocketLayer); adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name); } //Then work with ''adUser'' from here...

Debe ajustar cualquier llamada que tenga que ver con el ''contexto de directorio activo'' en lo siguiente para que actúe como el entorno de alojamiento para obtener la información de AD:

using (HostingEnvironment.Impersonate()){ ... }

También debe tener el conjunto de impersonate a verdadero en su web.config:

<system.web> <identity impersonate="true" />

Debe tener la autenticación de Windows activada en web.config:

<authentication mode="Windows" />


Si necesita obtener al usuario desde el controlador, use la propiedad User del controlador. Si lo necesita de la vista, completaría lo que necesita específicamente en ViewData , o simplemente podría llamar al Usuario ya que creo que es una propiedad de ViewPage .


Utilice System.Security.Principal.WindowsIdentity.GetCurrent().Name .

Esto hará que el usuario de Windows que ha iniciado sesión actualmente.


Yo suelo:

Membership.GetUser().UserName

No estoy seguro de que esto funcione en ASP.NET MVC, pero vale la pena intentarlo :)


loguearse en el nombre de usuario: System.Web.HttpContext.Current.User.Identity.Name


IPrincipal currentUser = HttpContext.Current.User; bool writeEnable = currentUser.IsInRole("Administrator") || ... currentUser.IsInRole("Operator");


var ticket = FormsAuthentication.Decrypt( HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value); if (ticket.Expired) { throw new InvalidOperationException("Ticket expired."); } IPrincipal user = (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket));