Pergunta

Queremos pedaço de código que podemos colar o código e obter o nome de usuário sob a qual o código é executado por:- (normalmente .LÍQUIDO código é executado sob a conta do pool de aplicativos)

  1. Trabalho de Timer.

  2. O receptor de evento.

  3. Webpart.

  4. Layouts de página do aplicativo.

  5. Controle Do Usuário

  6. JSOM

Então, nós queremos usar o RWEP e, novamente, verificar qual o nome de usuário de código está sendo executado.

O que snippet usamos?

ATUALIZAÇÃO

Eu não quero código que me dá o nome de usuário do usuário conectado.Eu quero o código que vai me dar o nome de usuário sob a qual o código será executado.

ATUALIZAÇÃO

Para uma página de aplicativo:

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

Dá valor como:Registrada no nome de usuário.

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

            }
        });

Dá valor como:Registrada no nome de usuário.

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

Dá 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;                        
                }

            }
        });

Dá valor como:servername\spadminaccountname

ATUALIZAÇÃO

(No nosso caso, o site coll.admin nome de usuário é o mesmo que o aplicativo web apppool nome de usuário, de modo que o que conta é realmente?)

1) Podemos concluir que as credenciais com as quais o código é executado é o 'NT AUTHORITY\IUSR' e se nós usamos RWEP, em seguida, o usuário é 'webapp/sitecol usuário admin conta'?Por exemplo, suponha que estamos acessando um arquivo no servidor, então, acima de 2 contas serão utilizados para acessar o arquivo e não a conta de utilizador com sessão iniciada.

2) o Que conta é usado quando acessar os recursos do SharePoint?É um dos 2 ou acima do registrado no credenciais de utilizadores?

Foi útil?

Solução

NotVonKaiser, neste caso, é correto:

1 é executado sob a conta do farm e todos os outros estão sob a conta de usuário conectada!

A conta de usuário conectada vai chamar o nt/autenticado conta no servidor que ele/ela tem de autenticação no servidor de afazeres o que ele está solicitando todo!se isso faz sentido ;)

pense nt/autenticado como se você estiver fisicamente logon no servidor de todo uma tarefa específica, como você faria no seu pc quando você liga a máquina para logonto windows!

então, para tornar isso claro:

2-6 executado sob atuais de logon na conta de usuário que tenha a autenticação do nt(permissão para acessar qualquer recurso é necessário)

agora, dito isso, há outro fator envolvido e que tem todo com a web.a configuração e a política cas (code access security policy), dependendo do que você defina (total, parcial, baixa) vai deter o acesso, você teria de recursos sob a atual registados na conta!

Em termos de implantação, as únicas diferenças entre a confiança total modelo de execução e o bin/CAS modelo de execução são o local onde implantar suas montagens e o código de diretivas de segurança de acesso associadas a essa localização.Em ambos os casos, qualquer não-compilado itens, como ASP.NET marcação de arquivos, arquivos XML ou arquivos de recurso, são normalmente implantados para a raiz do SharePoint em cada servidor Web front-end server.Se você deseja implantar uma solução de farm usando da fazenda solução de modelos de execução, você deve ter acesso ao servidor de arquivos sistema e ser um membro do grupo de segurança Administradores de Farm.

http://msdn.microsoft.com/en-us/library/ff798412.aspx

a maior parte do código é executado sob a actual sessão na conta de utilizador....a menos que você usuário reunwithelevatedprivlages de que é algo mais!

agora a questão que eu acredito que é algo mais complexo e mais profundo eu acredito que o seu olhar para ele tem todo com o processo de trabalho!

assim que você acessar a máquina -> goto site do sharepoint que autentica sua conta (autenticação nt) -> que você executar um trabalho que é executado sob o processo de trabalho w3wp.exe e eu acho que é isso que o seu referindo?

Um processo de trabalho de modo de usuário de código, cuja função é processar os pedidos, tal como o processamento de pedidos para retornar uma página estática, invocando uma ISAPI extensão ou filtro, ou a execução de um CGI (Common Gateway Interface) manipulador.

Em ambos os modos de isolamento de aplicativo, o processo de trabalho é controlada pelo serviço WWW.No entanto, no modo de isolamento do processo de trabalho, uma processo de trabalho é executado como um arquivo executável chamado W3wp.exe e, no IIS 5.0 modo de isolamento, um processo de trabalho é hospedado por Inetinfo.exe.Figura 2.2, que retrata a arquitetura de isolamento do IIS 5.0 modo, utiliza uma linha tracejada para sugerir que a relação entre o processo de trabalho e o serviço WWW.

Processos de trabalho de uso HTTP.sys para receber solicitações e enviar respostas usando HTTP.Processos de trabalho também executar o código da aplicação, como ASP.NET aplicações e serviços Web XML.Você pode configurar O IIS para executar vários processos de trabalho, que servem de aplicação diferentes piscinas em simultâneo.Este design separa aplicações pelo processo de limites e ajuda a obter o máximo de fiabilidade do servidor Web.

Por padrão, os processos de trabalho no modo de isolamento do processo de trabalho de execução sob a conta Serviço de Rede, o que tem a mais forte segurança (menos de acesso) compatível com a funcionalidade que é necessária.

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/29f53968-0115-451f-b26d-5ad58d87b5d1.mspx?mfr=true

assim, o processo de trabalho do iis seria a execução de código na parte inferior mas, para isso, em primeiro lugar, você precisa estar nt autenticado regarless!

o seguinte link mostra uma melhor compreensão!

http://msdn.microsoft.com/en-us/library/ff798428.aspx

EDITAR

1) Podemos concluir que as credenciais com as quais o código é executado é o 'NT AUTHORITY\IUSR' e se nós usamos RWEP, em seguida, o usuário é 'webapp/sitecol usuário admin conta'?Por exemplo, suponha que estamos para acessar um arquivo no servidor, então, acima de 2 de contas será utilizado para acessar o arquivo e não a conta de utilizador com sessão iniciada.

ok, acho que está a ficar confuso?

existem duas fases para isso....o usuário faz logon na máquina, sim?o usuário tem acesso e faz parte da 'NT AUTHORITY\IUSR' então ele é capaz de acessar os recursos específicos que necessitam de ser 'NT AUTHORITY\IUSR' dentro do sharepoint.....agora executar o código no back-end do servidor será dentro de w3wp.exe (como .cs código (prazo de montagem))...este é executado sob a conta do pool de aplicativos..mas isso não vai executar, a menos que o usuário conectado é parte do 'NT AUTHORITY\IUSR'.Não é um ou outro, mais como ambos ao mesmo tempo que está sendo usado.

Você sabe que o registrado em conta que a sua utilização obviouslt ;), mas para saber o w3wp.exe você precisa ir para o servidor e goto tast manager, olhar para processos e encontrar w3wp.exe...você deve ver coluna ao lado com o nome de utilizador que seria a web conta do pool de aplicativos.

2) o Que conta é usado quando acessar os recursos do SharePoint?É um dos 2 ou acima do registrado no credenciais de utilizadores?

sharepoint recursos são acessados pelo usuário conectado.o mesmo que acima.

Outras dicas

1 deve sempre ser executado sob a conta do farm de servidores.

Para 2, 3, 4, e 5, você deve ser capaz de trazer à tona esta informação usando este código:

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

Note que isto não funcionar corretamente se você tiver um 'RunWithElevatedPrivileges delegado bloco.Em vez disso, se você chamá-lo de dentro do delegado bloco, você terá o nome da conta que está a executar o código.Se você precisa fornecer um nome de usuário, nesse caso, chamada de a 'SPContext' objeto antes ou depois de executar o delegado bloco.Você não será capaz de passar o objeto para o delegado bloco diretamente, mas você deve ser capaz de extrair o que você precisa em cadeias de caracteres ou o que você tem e enviar eles em.

Para CSOM, supondo que você esteja usando JavaScript, este bloco de código vem de este MS página:

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();
}

Você vai ter que ter SP.js pré-carregadas antes de este script é executado, seja por degola-lo para a página principal ou adicionando uma "SharePoint:ScriptLink' bloco para ele em sua marcação.

Basicamente, o que você tem a fazer é esta:

  1. Chamar o cliente de contexto.
  2. Diga o contexto de cliente que você deseja obter a partir dele.
  3. Fazer uma chamada assíncrona para o serviço da web para obter a informação.
  4. Configurar métodos de retorno de chamada para manipular os dados, se a chamada assíncrona é bem-sucedida ou não.

Espero que ajude!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top