Problema de autenticação ao depurar no VS2013 - iis express

103

Estou tentando pegar o nome de usuário do windows ao depurar no Visual Studio 2013. Estou simplesmente usando:

httpcontext.current.user.identity.name

Se eu executar isso no meu Dev Server, ele funcionará bem, se eu executar no modo de depuração em qualquer versão anterior do Visual Studio, também funcionará bem.

Meu problema é - se eu executar isso no Visual Studio 2013, recebo uma string vazia.

Minha configuração da web é a seguinte.

<system.web>
    <authentication mode="Windows"/>
    <identity impersonate="false"/>
    <authorization>
       <allow users="*"/>
    </authorization>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    <customErrors mode="Off"/>
</system.web>
Neil Watson
fonte

Respostas:

215

Eu tinha acabado de atualizar para o VS 2013 a partir do VS 2012 e a identidade do usuário atual (HttpContext.User.Identity) estava vindo como anônima.

Tentei mudar o IIS express applicationhost.config, sem diferença.

A solução foi olhar as propriedades do projeto da web, apertar F4 para obter as propriedades do projeto quando tiver o nível superior do projeto selecionado. Não clique com o botão direito no projeto e selecione propriedades, isso é algo totalmente diferente.

Altere a autenticação anônima para desativada e a autenticação do Windows para ativada.

Funciona como molho :)

Toby Simmerling
fonte
10
Obrigado por isso. Eu não posso acreditar que eles adicionaram isso como um 'aprimoramento'. É para isso que serve o web.config. Agora não podemos confiar no que vemos em web.config. Brilhante.
trucker_jim
4
Acredito que esta é uma abordagem melhor do que a resposta aceita, pois não afetaria outro aplicativo em execução no IIS Express.
niaher de
Muitíssimo obrigado. Isso funcionou para mim também! Era um projeto do Visual Studio 2008 que atualizei para o Visual Studio 2013.
Rob K.
No VS 2012 eu usei: "Use Visual Studio Development Server". Então, uma atualização e isso funcionou. Embora agora execute o IIS Express.
Thomas Koelle
Esta deve ser a resposta aceita, se você acabou de atualizar para o VS 2013.
Nishant
130

Enquanto estava pesquisando, encontrei minha resposta, mas não consigo encontrar a resposta na internet, então pensei em compartilhar isto:

Corrigi meu problema modificando meu arquivo applicationhost.config. Meu arquivo foi salvo na pasta "\ Meus Documentos \ IISExpress \ config".

Parece que o VS2013 estava ignorando meu arquivo web.config e aplicando métodos de autenticação diferentes.

Tive que modificar esta parte do arquivo para ficar parecido com o abaixo. Na verdade, eu apenas modifiquei anonymousAuthentication para false e o modo windowsAuthentication para true.

<authentication>

  <anonymousAuthentication enabled="false" userName="" />

  <basicAuthentication enabled="false" />

  <clientCertificateMappingAuthentication enabled="false" />

  <digestAuthentication enabled="false" />

  <iisClientCertificateMappingAuthentication enabled="false">
  </iisClientCertificateMappingAuthentication>

  <windowsAuthentication enabled="true">
    <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>

</authentication>
Neil Watson
fonte
2
Eu tive que fazer isso para obter a depuração no VS2013 usando o IIS Express para funcionar de forma confiável. Sem isso, pareceu funcionar bem uma vez, e depois 401. (1) Há um comando AppCmd ​​que alteraria o arquivo applicationhost.config e (2), F4 no projeto da Web me permite desligar a autenticação anônima e ativar a autenticação do Windows. Fazer isso no VS2012 funcionou bem, no VS2013 não produz um ambiente de desenvolvimento 401 livre.
IanT8
4
@Neil, você salvou meu dia. BTW: Não é necessário desligar anonymousAuthentication. É suficiente ligar windowsAuthentication. Essas configurações controlam quais mecanismos de autenticação os sites têm permissão para usar.
chiccodoro
+1 também ... estou tentando resolver esse problema irritante há algum tempo com meu isntance local IISExpress
Jeff Lewis
Ah, ISSO é como fazer. Gênio. Obrigado por esta dica, muito útil!
Mike Gledhill
1
Tive que remover o "Negotiate" para poder testar uma chamada de serviço da web (com WSE3) sem obter um 401.
Wolf5
41

No Visual Studio 2013 E VS15 (mas acho que é o mesmo para todas as outras versões), basta pressionar F4 e alterar essas duas propriedades: - Autenticação anônima: Desativar - Autenticação do Windows: Ativar

ThaNet
fonte
1
Obrigado por isso. Eu não posso acreditar que eles adicionaram isso como um 'aprimoramento'. É para isso que serve o web.config. Agora não podemos confiar no que vemos em web.config. Brilhante.
trucker_jim
1
Você acabou de me salvar de uma reversão para o Visual Studio 2010!
Julien P
2
Não posso acreditar que esta não foi a pergunta / resposta # 1 de todos esses posts SO que continuam falando sobre as configurações do IIS
Perdido em
38

No VS2013 F4 em seu projeto para visualizar a janela de propriedades, desabilitar o acesso anônimo e habilitar a "autenticação do Windows"

Então vai funcionar. Não há necessidade de mudar mais nada

James Pressley
fonte
Frustrantemente, essa opção existe quando você deseja depurar um projeto da web, mas não existe para projetos de serviço. Grrrr ...
Mike Gledhill
9

O VS 2015 muda isso. Ele adicionou uma pasta .vs ao meu projeto da web e o applicationhost.config estava lá. Fiz as alterações sugeridas (autenticação da janela = verdadeiro, anon = falso) e ele começou a entregar um nome de usuário em vez de um espaço em branco.

Tom McDonald
fonte
8

Abra o arquivo applicationHost.config localizado na pasta C: \ Users [userid] \ Documents \ IISExpress \ config. Dentro desse arquivo, altere overrideModeDefault de anonymousAthentication e windowsAuthentication para "Permitir"

 <sectionGroup name="security">
                <section name="access" overrideModeDefault="Deny" />
                <section name="applicationDependencies" overrideModeDefault="Deny" />
                <sectionGroup name="authentication">
                    <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                    <section name="basicAuthentication" overrideModeDefault="Deny" />
                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="digestAuthentication" overrideModeDefault="Deny" />
                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="windowsAuthentication" overrideModeDefault="Allow" />
                </sectionGroup>

Em seguida, altere lockItem para "false" para AnonymousAuthenticationModule e WindowsAuthenticationModule

  <system.webServer>
            <modules>
                <!--
                <add name="HttpCacheModule" lockItem="true" />
-->
                <add name="DynamicCompressionModule" lockItem="true" />
                <add name="StaticCompressionModule" lockItem="true" />
                <add name="DefaultDocumentModule" lockItem="true" />
                <add name="DirectoryListingModule" lockItem="true" />
                <add name="IsapiFilterModule" lockItem="true" />
                <add name="ProtocolSupportModule" lockItem="true" />
                <add name="HttpRedirectionModule" lockItem="true" />
                <add name="ServerSideIncludeModule" lockItem="true" />
                <add name="StaticFileModule" lockItem="true" />
                <add name="AnonymousAuthenticationModule" lockItem="false" />
                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
                <add name="UrlAuthorizationModule" lockItem="true" />
                <add name="BasicAuthenticationModule" lockItem="true" />
                <add name="WindowsAuthenticationModule" lockItem="false" />

Fazer essas alterações permitirá que as configurações da web existentes substituam o que está no arquivo applicationHost para IIS Express.

Ngiunta
fonte
1
Essas mudanças mais um logoff funcionaram para mim. Algo está armazenado em cache, porque interromper o IIS Express a partir do ícone de notificação e reiniciar o VS não funciona. Este erro é realmente irritante, ocorre a cada poucos meses ou meio ano quando uma nova VM ou PC de desenvolvedor é construído. Sempre causa até meio dia perdido, mexendo nas configurações. O problema é que embora essas configurações devam consertar imediatamente, não resolve e depois de brincar de repente funciona, muito estranho e eu não gosto disso. Um logoff é então recomendado. Na próxima vez que isso acontecer, tentarei isolar, mas esse é um padrão muito irritante.
Tony Wall
6

Você também pode modificar as propriedades do seu projeto da web, escolher "Web" nas guias à esquerda e alterar a lista suspensa Servidores para "IIS local". Crie um novo diretório virtual e use o gerenciador IIS para configurar seu pool de sites / aplicativos conforme desejado.

Eu prefiro esse método, pois você normalmente tem um diretório v (ou site) do IIS local para testar localmente. Você não afetará nenhum outro site dessa maneira.

Propriedades do projeto da web

ScottLenart
fonte
1

Parece que a resposta certa foi fornecida pelo usuário 3149240 acima. No entanto, como Neil Watson apontou, o arquivo applicationhost.config está em jogo aqui.

As alterações podem ser feitas no painel de propriedades do VS ou no arquivo, embora em um local diferente. Perto da parte inferior do arquivo applicationhost.config está um conjunto de elementos de localização. Cada aplicativo para IIS Express parece ter um desses. Alterar as configurações na IU atualiza esta seção do arquivo. Portanto, você pode alterar as configurações por meio da IU ou modificar este arquivo.

Aqui está um exemplo com autenticação anônima desativada e autenticação do Windows ativada:

<location path="MyApp">
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>

Isso é equivalente na interface do usuário do VS a:

Anonymous Authentication: Disabled
Windows Authentication: Enabled
EricksonG
fonte
No VS atual, isso não funciona, ele sempre dirá que está bloqueado, mesmo quando os módulos applicationhost.config forem desbloqueados nos documentos do usuário e nos caminhos da solução .vs / config. Além disso, não é verdade que este é o único lugar, as configurações da janela de propriedades são realmente armazenadas no XML do projeto da web do VS. Mas não importa porque alterá-los também não ajuda, o host do aplicativo sempre sobrescreve. Foi necessário fazer logoff para que essas alterações funcionassem, só isso.
Tony Wall
0

F4 nem sempre me leva a este painel. Além disso, costuma-se dizer que uma imagem vale mais que mil palavras.

insira a descrição da imagem aqui

Weihui Guo
fonte