Pregunta

Queremos un pedazo de código que podemos pegar en el código detrás y obtener el nombre de usuario en el que se ejecuta el código para: - (generalmente .NET CODE se ejecuta en relato del grupo de aplicaciones)

  1. trabajo de temporizador.

  2. Receptor de evento.

  3. webpart.

  4. Página de aplicación de diseño.

  5. Control de usuario

  6. jsom

    Luego, queremos usar RWEP y volver a verificar el código de nombre de usuario.

    ¿Qué fragmento usamos?

    actualización

    No quiero código lo que me dé el nombre de usuario del usuario registrado. Quiero el código que me dará el nombre de cuenta en el que se ejecutará el código.

    actualización

    para una página de aplicación:

      SPUser user1 = SPContext.Current.Web.CurrentUser;
            string userName1 = user1.Name;
    

    Da valor como: nombre de usuario registrado.

     SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(idd))
                {
                    using (SPWeb rootWeb = site.OpenWeb())
                    {
                        SPUser user2 = SPContext.Current.Web.CurrentUser;
                        string userName2 = user2.Name;
                    }
    
                }
            });
    

    da valor como: Inicia sesión en nombre de usuario.

     var User = System.Security.Principal.WindowsIdentity.GetCurrent().User;
            var UserName = User.Translate(typeof(System.Security.Principal.NTAccount)).Value;
    

    da valor como: NT Authority \ IUSR

      SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(idd))
                {
                    using (SPWeb rootWeb = site.OpenWeb())
                    {
                        var User12 = System.Security.Principal.WindowsIdentity.GetCurrent().User;
                        var UserName12 = User12.Translate(typeof(System.Security.Principal.NTAccount)).Value;                        
                    }
    
                }
            });
    

    da valor como: servername \ spadminaccountname

    actualización

    (en nuestro caso, el sitio Coll. Admin Nombre de usuario es el mismo que el nombre de usuario de la aplicación web AppPepool, por lo que es realmente la cuenta?)

    1) ¿Podemos concluir que las credenciales en los cuales se ejecutan el código es la 'Autoridad NT \ IUSR' y si usamos RWEP entonces el usuario es 'WebApp / SiteCol Admin User ACOUNT'? Por ejemplo, supongamos que estamos accediendo a un archivo en el servidor, entonces las 2 cuentas anteriores se utilizarán para acceder al archivo y no en la cuenta de usuario registrado.

    2) ¿Qué cuenta se usa al acceder a los recursos de SharePoint? ¿Es uno de los 2 de las credenciales de los usuarios anteriores o registrados en los usuarios?

¿Fue útil?

Solución

Notvonkaiser en este caso es correcto:

1 RUNS bajo la cuenta de la granja y todos los demás están registrados en la cuenta de usuario de inicio de sesión!

La cuenta de usuario registrada en la cuenta de NT / Autenticado en el servidor que tiene autenticación en el servidor TODO ¿Qué está solicitando TODO? Si eso tiene sentido;)

Piense en NT / Autenticado Como si estuviera iniciando sesión físicamente en el servidor TODO una tarea específica como lo haría en su PC de escritorio cuando encienda la máquina para Logonto Windows!

para que esto sea claro:

2-6 Ejecute bajo la cuenta de usuario registrada actualizada en la cuenta de usuario que tiene la autenticación NT (permitida para acceder a cualquier recurso necesario)

Ahora diciendo esto, hay otro factor involucrado y que tiene TODO con su Web.Config y CAS Policy (Política de seguridad de acceso al código), dependiendo de lo que configure (completo, parcial, bajo) ¿Determinará el acceso que tendría a los recursos bajo la cuenta actualizada actualizada?

En términos de despliegue, las únicas diferencias entre la confianza completa El modelo de ejecución y el modelo de ejecución bin / CAS son la ubicación donde Implementa sus asambleas y las políticas de seguridad de acceso al código asociado a esa ubicación. En ambos casos, ningún artículo no compilado, como archivos de marcado ASP.NET, archivos XML o archivos de recursos, son Normalmente se despliega en la raíz de SharePoint en cada extremo frontal de la web servidor. Si desea implementar una solución agrícola utilizando cualquiera de las fincas Modelos de ejecución de soluciones, debe tener acceso al archivo del servidor Sistema y ser miembro del grupo de seguridad de los administradores de la granja.

http://msdn.microsoft.com/en-us/library/ FF798412.ASPX

La mayoría del código se ejecuta en la cuenta de usuario que ha iniciado sesión en la cuenta actual ... ¡a menos que use el usuario ReunwitheleVatedPrivlages que eso es algo más!

Ahora a la pregunta que creo es algo más complejo y más profundo, creo que lo que está buscando, tiene que TODO con el proceso de trabajo.

Entonces, inicia sesión en la máquina -> Goto SharePoint Sitio que autentica su cuenta (Autenticación NT) -> de lo que realiza un trabajo que se ejecuta bajo el proceso de trabajador w3wp.exe y creo que es esto que se refiere.

Un proceso de trabajador es el código del modo de usuario cuya función es procesar las solicitudes, como las solicitudes de procesamiento para devolver una página estática, invocando un ISAPI Extensión o filtro, o ejecución de una interfaz de pasarela común (CGI) manejador.

En ambos modos de aislamiento de la aplicación, el proceso de trabajador está controlado por el servicio www. Sin embargo, en el modo de aislamiento del proceso de trabajador, un El proceso de trabajador se ejecuta como un archivo ejecutable llamado w3wp.exe, y en IIS 5.0 Modo de aislamiento, un proceso de trabajador está alojado por INETINFO.EXE. Figura 2.2, que representa la arquitectura para el modo de aislamiento IIS 5.0, utiliza una línea discontinua para sugerir la relación entre el proceso del trabajador y el servicio www.

Los procesos de trabajadores utilizan http.sys para recibir solicitudes y enviar Respuestas mediante el uso de HTTP. Los procesos de trabajadores también ejecutan el código de aplicación, Como aplicaciones ASP.NET y servicios web XML. Puedes configurar IIS para ejecutar múltiples procesos de trabajadores que sirven diferentes aplicaciones piscinas simultáneamente. Este diseño separa las aplicaciones por proceso. Límites y ayuda a lograr la máxima confiabilidad del servidor web.

De forma predeterminada, los procesos de trabajadores en el modo de aislamiento del proceso de trabajador se ejecuta Bajo la cuenta de servicio de red, que tiene la seguridad más fuerte. (Menos Acceso) Compatible con la funcionalidad que se requiere.

>> http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/iis/29f53968-0115-451f-b26d-5ad58d87b5d1.mspx?mfr=true

¿Entonces el proceso de trabajador de IIS sería el que ejecuta el código en la parte inferior, pero para hacer esto en primer lugar que necesita para ser autenticados a autenticados?

¡El siguiente enlace muestra una mejor comprensión!

http://msdn.microsoft.com/en-us/library/ FF798428.ASPX

editar

1) ¿Podemos concluir que las credenciales bajo las cuales se ejecuta el código es el 'NT Authority \ IUSR' y si usamos RWEP entonces el usuario es 'WebApp / Sitedecol Admin User Acount'? Por ejemplo, supongamos que estamos Acceder a un archivo en el servidor y luego se utilizarán las 2 cuentas anteriores Para acceder al archivo y no en la cuenta de usuario registrado.

OK, creo que estás confundido?

Hay dos etapas a esto ... ¿El usuario inicia sesión en la máquina? Ese usuario tiene acceso y forma parte de 'NT Authority \ IUSR' para que pueda acceder a recursos específicos que requieren que usted sea 'NT Authority \ IUSR' dentro de SharePoint ... ahora que ejecuta el código en el backend del servidor W

Estaré dentro de W3WP.EXE (como el código .cs (dentro de la asamblea)) ... Esto se ejecuta bajo la cuenta de la piscina de la aplicación. Pero esto no funciona a menos que el usuario registrado sea parte de 'NT Authority \ IUSR'.No es uno u otro, más como ambos al mismo tiempo que se usan.

Conoce la cuenta registrada en cuenta que está usando obviouslt;), pero para conocer el W3WP.EXE, debe ir al servidor y goto Manager, mire los procesos y encuentre W3WP.EXE ... debe ver la columna SiguientePara ello con el nombre de usuario, que sería la cuenta de la Pool de la aplicación web.

2) ¿Qué cuenta se usa al acceder a los recursos de SharePoint?Lo es ¿Una de las credenciales de los usuarios anteriores o registrados en los usuarios?

Los recursos de SharePoint se accede por el usuario registrado.igual que el anterior.

Otros consejos

1 siempre debe funcionar bajo la cuenta de la granja.

Durante 2, 3, 4 y 5, debe poder ferretizar esta información utilizando este código:

SPUser user = SPContext.Current.Web.CurrentUser;
string userName = user.Name; //you can also call user.Email here

Tenga en cuenta que esto no funciona correctamente si tiene un bloque de delegados de 'RunwiteVelevatedPrivileges'. Más bien, si lo llamas dentro del bloque del delegado, simplemente obtendrá el nombre de la cuenta que está ejecutando el código. Si necesita suministrar un nombre de usuario en ese caso, llame al objeto 'SPCONTEXT' antes o después de ejecutar el bloque del delegado. No podrá pasar el objeto al bloque del delegado directamente, pero usted debería puede extraer lo que necesita en cadenas o qué tiene y enviarlos en.

Para CSOM, suponiendo que está utilizando JavaScript, este bloque de código proviene de esta página ms:

function getUserProperties() {

// Replace the placeholder value with the target user's credentials.
var targetUser = "domainName\\userName";

// Get the current client context and PeopleManager instance.
var clientContext = new SP.ClientContext.get_current();
var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

// Get user properties for the target user.
// To get the PersonProperties object for the current user, use the
// getMyProperties method.
personProperties = peopleManager.getPropertiesFor(targetUser);

// Load the PersonProperties object and send the request.
clientContext.load(personProperties);
clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {

// Get a property directly from the PersonProperties object.
var messageText = " \"DisplayName\" property is "
    + personProperties.get_displayName();

// Get a property from the UserProfileProperties property.
messageText += "<br />\"Department\" property is "
    + personProperties.get_userProfileProperties()['Department'];
$get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
$get("results").innerHTML = "Error: " + args.get_message();
}

Tendrá que tener SP.JS precargado antes de que se ejecute este script, ya sea que lo pegue en la página maestra o agregando un bloque 'SharePoint: ScriptLink' para ello en su marcado.

Básicamente, lo que tiene que hacer es esto:

  1. Llame al contexto del cliente.
  2. Diga al contexto del cliente lo que desea recuperar de él.
  3. Haz una llamada asíncrona al servicio web para obtener esa información.
  4. Configure los métodos de devolución de llamada para manejar los datos si la llamada ASYNC tiene éxito o no.

    espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
scroll top