Como verificar o nome de utilizador/nome de usuário sob a qual o código é executado?
-
10-12-2019 - |
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)
Trabalho de Timer.
O receptor de evento.
Webpart.
Layouts de página do aplicativo.
Controle Do Usuário
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?
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.
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:
- Chamar o cliente de contexto.
- Diga o contexto de cliente que você deseja obter a partir dele.
- Fazer uma chamada assíncrona para o serviço da web para obter a informação.
- Configurar métodos de retorno de chamada para manipular os dados, se a chamada assíncrona é bem-sucedida ou não.
Espero que ajude!