333 messaggi dal 05 agosto 2005
Salve Ragazzi,

Ho appena pubblicato una nuovo sito (web application) in un IIS Server 7.0 che si collega at un DB SQL in un altro server.

Se apro il sito nel server non mi da problemi, ma non appena provo ad aprire il sito da remoto ricevo quest'errore:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

Sfortunatamente l'accesso al DB e' fatto tramite Windows Authentication basata su gruppo di Active Directory. Di conseguenza non posso inserire le ceredentials di accesso al DB nella stringa di connessione inserita nel web.config.

Ho letto ll'articolo relativo al The Dreaded Double-hop dilemma and it’s dynamic destroyer, Kerberos https://kb4sp.wordpress.com/2007/07/16/the-dreaded-double-hop-dilemma-and-its-dynamic-destroyer-kerberos/ ma non danno soluzioni.


Il sito in IIS ha Authentication: ASP.NET e Windows Authentication abilitate. Windows authentication ha abilitato il Kernel-model authentication.

Grazie

Marco
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Marco,
chiarisci cosa intendi con "remoto".

ma non appena provo ad aprire il sito da remoto ricevo quest'errore:


Il PC "remoto" è unito al dominio Active Directory? Oppure è il PC di casa? Hai fatto il login a questo PC usando le credenziali dell'utente di dominio? Che browser usi?

ciao,
Moreno

Enjoy learning and just keep making
333 messaggi dal 05 agosto 2005
Ciao Moreno,

Per PC remoto intendo un PC all'interno del dominio Active Directory.
Le credenziali di login al dominio sono le mie. Sotto il mio web.config:

<?xml version="1.0"?>
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<remove name="ChartImageHandler"/>
<add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</handlers>
</system.webServer>
<connectionStrings>
<add name="CS_611_QA_BRR" connectionString="Data Source=XXXXXXXX\YYYYYYY;Initial Catalog=611_QA_BRR;Integrated Security=True" providerName="System.Data.SqlClient"/>

</connectionStrings>
<system.web>

<identity impersonate="true"/>

<httpHandlers>
<add path="ChartImg.axd" verb="GET,HEAD,POST"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
validate="false"/>
</httpHandlers>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
</pages>
<compilation debug="true" strict="false" explicit="true">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<customErrors mode="Off" />
</system.web>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
<add key="ChartImageHandler" value="storage=memory;deleteAfterServicing=true;"/>
</appSettings>
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="PIPPOPLUTO\APP-BEXTeam" />
<add accessType="Allow" roles="PIPPOPLUTO\APP-IE-AdminTeam" />
<add accessType="Allow" roles="PIPPOPLUTO\APP-IE-QATeam" />
<add accessType="Allow" roles="PIPPOPLUTO\APP-IE-ProdTeam" />
</authorization>
</security>

</system.webServer>

</configuration>
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Marco,
può darsi che il processo di ASP.NET non stia impersonando l'utente che invia la richiesta.
Nell'articolo che hai citato c'è scritto:

That's why you need to allow the service accounts of the web application to impersonate the user's account that is currently logged into it.


E tu questo l'hai fatto nel web.config con:

<identity impersonate="true"/>

Però non vedo l'elemento <authentication mode="Windows">

Fai una cosa... ripercorri accuratamente tutte le istruzioni che trovi elencate qui:
https://support.microsoft.com/it-it/help/810572/how-to-configure-an-asp-net-application-for-a-delegation-scenario

Inoltre dovresti verificare che il tuo browser sia facendo il passthrough delle credenziali. Cioè: è inutile essersi loggati al PC Windows con un account di dominio se poi il browser non inoltra la tua identità all'applicazione web. Nell'articolo che ti ho linkato c'è anche scritto come configurare Internet Explorer in modo che inoltri la tua identità. Per il momento prova con Internet Explorer.
Puoi verificare se la tua identità viene inoltrata creando una nuova pagina aspx e farle stampare il nome dell'utente. Leggi qui, trovi vari modi di ottenere il nome e di verificare se l'impersonate sta funzionando.
https://stackoverflow.com/questions/19676312/how-to-get-user-name-using-windows-authentication-in-asp-net

ciao,
Moreno
Modificato da BrightSoul il 04 maggio 2019 13:46 -

Enjoy learning and just keep making
333 messaggi dal 05 agosto 2005
Ciao Moreano,

Ho seguito l'alticolo step by step ma il problema persiste.

Ho modificato il web.config cosi:

<connectionStrings>
<add name="CS_611_QA_BRR" connectionString="Data Source=XXXXXXP\YYYYYY;Initial Catalog=611_QA_BRR;Integrated Security=True;Network=dbmssocn " providerName="System.Data.SqlClient"/>

</connectionStrings>
<system.web>

<authorization>
<allow users="*" />
<deny users="?" />
</authorization>

<authentication mode="Windows" />
<identity impersonate="true"/>




Ho modificato le Authentication del site in IIS, lasciano solo "ASP.NET Impersonation" e "Windows Authentication" abilitate.

Ho creato una pagina per visualizzare le credenziali, utilizzando "Scenario 4: Windows Authentication in IIS, impersonation on"

HttpContext.Current.Request.LogonUserIdentity.Name MYDOMAIN\USER1
HttpContext.Current.Request.IsAuthenticated True
HttpContext.Current.User.Identity.Name MYDOMAIN\USER1
System.Environment.UserName USER1
Security.Principal.WindowsIdentity.GetCurrent().Name MYDOMAIN\USER1

E le credenziali sono corrette.
Il site viene visualizzato correttemente, ma non appena mi sposto su una pagina dove viene utilizzata la connection string, continuo ad ottenere il solito errore:



Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.


Il nostro system administrator dice che e' un problema di account. Ho richiesto un Active Directory service account per authenticare l'accesso del server IIS sul SQL DB. Ti aggiorno su ulteriori evoluzioni.

Speriamo funzioni :-(

Grazie ancora.

Marco
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Marco,


Ho creato una pagina per visualizzare le credenziali, utilizzando "Scenario 4: Windows Authentication in IIS, impersonation on"
E le credenziali sono corrette.

Ok, bene, hai verificato che l'identità arriva correttamente all'applicazione web.

A questo punto il problema sarà lato database server? Non saprei... controlla giusto che nella tua connection string ci sia Integrated Securirity=true.
https://stackoverflow.com/questions/1229691/what-is-the-difference-between-integrated-security-true-and-integrated-securit
Eventualmente posta la tua connection string, ovviamente rimuovendo le informazioni sensibili.


Il nostro system administrator dice che e' un problema di account.

Ok, fammi sapere se riuscite a risolvere.

ciao,
Moreno

Enjoy learning and just keep making
333 messaggi dal 05 agosto 2005
Ciao Moreno,

Dopo settimane di attesa, All fine il nostro system administrator non ha creato un Active Directory service account per ragioni di sicurezza.

Di conseguenza sono punto e a capo.


Devo assolutamente cercare di rimuovere le mie credenziali da IIS.

Riassumendo:

Web.Config:

<?xml version="1.0"?>
<configuration>
<system.webServer>
<!--++++++++++++++++++++++++ COMMENT IF WORKING IN DEVELOPMENT MODE ++++++++++++++++++++++++-->
<httpErrors errorMode="Custom">
<remove statusCode="401"/>
<error statusCode="401" path="/Denied.aspx" responseMode="ExecuteURL" prefixLanguageFilePath=""/>
<remove statusCode="403"/>
<error statusCode="403" path="/Denied.aspx" responseMode="ExecuteURL" prefixLanguageFilePath=""/>
<remove statusCode="404"/>
<error statusCode="404" path="/Denied.aspx" responseMode="ExecuteURL" prefixLanguageFilePath=""/>
</httpErrors>
<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<remove name="ChartImageHandler"/>
<add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</handlers>
</system.webServer>
<connectionStrings>
<add name="CS_611_QA_BRR" connectionString="Data Source=XXXXXXX\YYYYYYYY;Initial Catalog=611_QA_BRR; Integrated Security=SSPI; Persist Security Info=False;" providerName="System.Data.SqlClientSystem.Data.SqlClient"/>
</connectionStrings>
<system.web>
<httpHandlers>
<add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
<authentication mode="Windows"/>
<identity impersonate="true"/>
<!--++++++++++++++++++++++++ COMMENT IF WORKING IN DEVELOPMENT MODE ++++++++++++++++++++++++-->
<authorization>
<allow roles="PIPPOPLUTO\APP-BEXTeam_City, PIPPOPLUTO\APP-IE-AdminTeam_City, PIPPOPLUTO\APP-IE-ProdTeam_City, PIPPOPLUTO\APP-IE-QATeam_City" />
<deny users="*"/>
</authorization>
<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
</pages>
<compilation debug="true" strict="false" explicit="true">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Data.Services.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<!--++++++++++++++++++++++++ COMMENT IF WORKING IN DEVELOPMENT MODE ++++++++++++++++++++++++-->
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="Error.aspx">
<error statusCode="401" redirect="/Error.aspx"/>
<error statusCode="403" redirect="/Denied.aspx"/>
<error statusCode="404" redirect="/Denied.aspx"/>
</customErrors>
<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
</system.web>
<!--++++++++++++++++++++++++ COMMENT IF WORKING IN DEVELOPMENT MODE ++++++++++++++++++++++++-->
<location path="QA">
<system.web>
<authorization>
<allow roles="PIPPOPLUTO\APP-BEXTeam_City, PIPPOPLUTO\APP-IE-AdminTeam_City, PIPPOPLUTO\APP-IE-QATeam_City"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

<location path="Prod">
<system.web>
<authorization>
<allow roles="PIPPOPLUTO\APP-BEXTeam_City, PIPPOPLUTO\APP-IE-AdminTeam_City, PIPPOPLUTO\APP-IE-ProdTeam_City"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

<location path="Admin">
<system.web>
<authorization>
<allow roles="PIPPOPLUTO\APP-BEXTeam_City, PIPPOPLUTO\APP-IE-AdminTeam_City"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<appSettings>
<add key="ChartImageHandler" value="storage=memory;deleteAfterServicing=true;"/>
</appSettings>
</configuration>



Global.asax:

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)


Dim SessionId As String = Session.SessionID

Response.Buffer = True


'++++++++++++++++++++++++ COMMENT IF WORKING IN DEVELOPMENT MODE ++++++++++++++++++++++++

Session("User") = HttpContext.Current.User.Identity.Name
Dim currentUser As WindowsIdentity = CType(HttpContext.Current.User.Identity, System.Security.Principal.WindowsIdentity) 'WindowsIdentity.GetCurrent()


For Each iRef As IdentityReference In currentUser.Groups

'------------ BEX -------------------

If iRef.Translate(GetType(NTAccount)).ToString = "PIPPOPLUTO\APP-BEXTeam_City" Or iRef.Translate(GetType(NTAccount)).ToString = "PIPPOPLUTO\APP-IE-AdminTeam_City" Then

Session("NTAccount_Group") = "PIPPOPLUTO\APP-IE-AdminTeam_City"

Response.Redirect("~/Daily_Dashboard.aspx")

Return

End If

Next

For Each iRef As IdentityReference In currentUser.Groups

'------------------- QA ---------------------------
If iRef.Translate(GetType(NTAccount)).ToString = "PIPPOPLUTO\APP-IE-QATeam_City" Then

Session("NTAccount_Group") = "PIPPOPLUTO\APP-IE-QATeam_City"

Response.Redirect("~/QA/Default_QA.aspx")

Return

'------------------- PROD ---------------------------
ElseIf iRef.Translate(GetType(NTAccount)).ToString = "PIPPOPLUTO\APP-IE-ProdTeam_City" Then

Session("NTAccount_Group") = "PIPPOPLUTO\APP-IE-ProdTeam_City"

Response.Redirect("~/Prod/Default_Prod.aspx")

Return

End If

Next

If Session("NTAccount_Group") = "" Then

Response.Redirect("~/Denied.aspx")

Return

End If

End Sub

IIS - Site


- ASP.NET Impersonation: Enable (Property - Identity to impersonate = Specific user: "le mie credenziali")
- Windows Authentication: Enable ( Advance Settings: Extended Protection = Off, Enable Kernel-mode authentication: flagged, Providers: NTLM, Negotiate)

Tutte le altre Authentications sono disabilitate


IIS - Application Pool - Basic Settings

- .NET Framework version: .NET Framework v4.0.3.319
- Managed pipeline mode: Integrated
- Start application pool immediately: flagged

IIS - Application Pool - Advanced Settings

- Processed Model: Identity = "le mie credenziali"

IIS - Application Pool - Bindings

Type: http
IP Address: 10.XXX.XX.XX
Port: 8080
Host name: vuoto


--------------------------------------------------------------------------

Ieri sera ho provato a verificare l'identita' di collegamento al site con quando l'utente BIX si collega e sotto trovi il risultato:


HttpContext.Current.Request.LogonUserIdentity.Name = PIPPOPLUTO\BIX
HttpContext.Current.Request.IsAuthenticated = True
HttpContext.Current.User.Identity.Name = PIPPOPLUTO\BIX
System.Environment.UserName = "il mio username"
Security.Principal.WindowsIdentity.GetCurrent().Name = PIPPOPLUTO\"il mio username"
Page.User.Identity.Name = PIPPOPLUTO\BIX


Vedi qualcosa di strano che impedisca l'authentication senza le mie credenziali?

Grazie ancora

Marco
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Marco,


Devo assolutamente cercare di rimuovere le mie credenziali da IIS.


Intendi da qui?

IIS - Application Pool - Advanced Settings
- Processed Model: Identity = "le mie credenziali"


Ah, non avevo capito che l'application pool veniva eseguito col tuo account.
Prova ad impostare una delle altre opzioni, tipo ApplicationPoolIdentity o LocalSystem. Teoricamente, dato che l'autenticazione per Windows è stata abilitata, l'identità impostata sull'application pool dovrebbe essere ridefinita con quella dell'utente che effettua la richiesta web.

A quel punto vedi se tutti questi valori sono coerenti con l'identità dell'utente che si collega.

HttpContext.Current.Request.LogonUserIdentity.Name = PIPPOPLUTO\BIX
HttpContext.Current.Request.IsAuthenticated = True
HttpContext.Current.User.Identity.Name = PIPPOPLUTO\BIX
System.Environment.UserName = "il mio username"
Security.Principal.WindowsIdentity.GetCurrent().Name = PIPPOPLUTO\BIX"
Page.User.Identity.Name = PIPPOPLUTO\BIX


ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.