Artikel ID: 329802 - Laatste beoordeling: woensdag 31 december 2008 - Wijziging: 6.6

Fout: Proxyverificatie via IAuthenticate mislukt op beveiligde URL

Hotfix Download is availableDeze hotfix is als download beschikbaar
Download deze hotfix nu

Op deze pagina

Alles uitklappen | Alles samenvouwen
Belangrijk De hotfix die in dit artikel wordt beschreven, is vervangen door de Critical Update 813951. Klik op het volgende artikelnummer, zodat het desbetreffende Microsoft Knowledge Base-artikel worden weergegeven voor meer informatie over deze update:
813951  (http://support.microsoft.com/kb/813951/NL/ ) U krijgt geen toegang tot uw MSN-e-mailaccount of u kunt niet verifiëren bij een website in diverse programma's

Symptomen

Wanneer u in een host voor webbrowserbesturingselementen via een proxyserver waarvoor verificatie vereist is voor het eerst naar een beveiligde URL navigeert en u de verificatiereferenties opgeeft via de interface IAuthenticate, wordt mogelijk een foutbericht weergegeven dat de pagina niet is gevonden. Belangrijke opmerking:
813951  (http://support.microsoft.com/kb/813951/NL/ )
Deze hotfix bevat een fout die u kunt deze oplossen met behulp van het volgende artikel in de Microsoft Knowledge Base: 813951 - BUG: Proxy Authentication Through IAuthenticate May Fail on Secure URL.

Oplossing

Een ondersteunde hotfix is beschikbaar bij Microsoft. Deze hotfix is echter alleen bedoeld als oplossing van het probleem dat in dit artikel wordt beschreven. Voer deze hotfix alleen uit op systemen waarop dit specifieke probleem zich voordoet. Deze hotfix moet mogelijk extra worden getest. Als u geen ernstige problemen ondervindt, raadt Microsoft u daarom aan te wachten op de volgende update waarin deze hotfix is opgenomen.

Als de hotfix kan worden gedownload, is aan het begin van dit Knowledge Base-artikel een sectie 'Hotfix kan worden gedownload' opgenomen. Als een dergelijke sectie niet aanwezig is, kunt u de hotfix aanvragen bij de klantondersteuning van Microsoft.

Opmerking Als er nog andere problemen optreden of als er oplossingen vereist zijn, moet u mogelijk een afzonderlijk serviceverzoek indienen. De normale ondersteuningskosten gelden voor extra ondersteuningsvragen die niet in aanmerking komen voor deze specifieke hotfix. Bezoek de volgende website van Microsoft voor een volledige lijst met telefoonnummers van de klantondersteuning van Microsoft of om een afzonderlijk serviceverzoek te maken:
http://support.microsoft.com/contactus/?ws=support (http://support.microsoft.com/contactus/?ws=support)
Opmerking Op het formulier 'Hotfix kan worden gedownload' zijn de talen vermeld waarvoor de hotfix beschikbaar is. Als uw taal daar niet bij staat, is de hotfix niet beschikbaar voor die taal.

De Engelse versie van deze correctie heeft de bestandskenmerken die in de volgende tabel worden weergegeven (of recentere kenmerken). De datums en tijden voor deze bestanden worden weergegeven in UTC-notatie (Coordinated Universal Time). Wanneer u de bestandsinformatie weergeeft, wordt deze naar de lokale tijd geconverteerd. Als u het verschil tussen UTC en lokale tijd wilt bepalen, gebruikt u het tabblad Tijdzone van de optie Datum en tijd in het Configuratiescherm.
Datum        Tijd   Versie         Grootte    Bestandsnaam ------------------------------------------------------- 24.02.2003   23:22:38  6.0.2800.1139  483.328  Urlmon.dll

Status

Microsoft heeft bevestigd dat deze fout zich kan voordoen in de Microsoft-producten die aan het begin van dit artikel worden vermeld.

Meer informatie

Deze fout treedt op omdat de proxyverificatiegegevens niet correct in het cachegeheugen worden opgeslagen wanneer ze onder deze omstandigheden via een beveiligde verbinding worden verzonden.

Het probleem reproduceren

  1. Stel een proxyserver in.
  2. Maak een testaccountnaam en maak vervolgens een wachtwoord met de machtiging om de proxyserver te gebruiken.
  3. Maak een klassetoepassing CHtmlView van het type MFC (Microsoft Foundation Classes) en implementeer de interfaces IAuthenticate en IServiceProvider in een site met aangepaste besturingselementen. Via de interface IServiceProvider kan het besturingselement van de webbrowser de interface IAuthenticate ontdekken.

    De volgende voorbeeldcode is specifiek voor Microsoft Foundation Classes 7.0:

    MyOleControlSite.h
    #include <afxocc.h>
    #include <afxhtml.h>
    
    class CHtmlControlSite: public COleControlSite
    {
    public:
    	CHtmlControlSite(COleControlContainer* pParentWnd);
    	~CHtmlControlSite();
    
    	CHtmlView* GetView() const;
    
    	BEGIN_INTERFACE_PART(DocHostUIHandler, IDocHostUIHandler)
    		STDMETHOD(ShowContextMenu)(DWORD, LPPOINT, LPUNKNOWN, LPDISPATCH);
    		STDMETHOD(GetHostInfo)(DOCHOSTUIINFO*);
    		STDMETHOD(ShowUI)(DWORD, LPOLEINPLACEACTIVEOBJECT,
    			LPOLECOMMANDTARGET, LPOLEINPLACEFRAME, LPOLEINPLACEUIWINDOW);
    		STDMETHOD(HideUI)(void);
    		STDMETHOD(UpdateUI)(void);
    		STDMETHOD(EnableModeless)(BOOL);
    		STDMETHOD(OnDocWindowActivate)(BOOL);
    		STDMETHOD(OnFrameWindowActivate)(BOOL);
    		STDMETHOD(ResizeBorder)(LPCRECT, LPOLEINPLACEUIWINDOW, BOOL);
    		STDMETHOD(TranslateAccelerator)(LPMSG, const GUID*, DWORD);
    		STDMETHOD(GetOptionKeyPath)(OLECHAR **, DWORD);
    		STDMETHOD(GetDropTarget)(LPDROPTARGET, LPDROPTARGET*);
    		STDMETHOD(GetExternal)(LPDISPATCH*);
    		STDMETHOD(TranslateUrl)(DWORD, OLECHAR*, OLECHAR **);
    		STDMETHOD(FilterDataObject)(LPDATAOBJECT , LPDATAOBJECT*);
    	END_INTERFACE_PART(DocHostUIHandler)
    
    	DECLARE_INTERFACE_MAP()
    };
    
    class CMyOleControlSite: public CHtmlControlSite
    {
    public:
    	CMyOleControlSite(COleControlContainer *pCnt = NULL):CHtmlControlSite(pCnt) {}
    
    	BEGIN_INTERFACE_PART(Authenticate, IAuthenticate)
    
    	STDMETHODIMP Authenticate( 
    		HWND __RPC_FAR *phwnd,
    		LPWSTR __RPC_FAR *pszUsername,
    		LPWSTR __RPC_FAR *pszPassword);
    
    	END_INTERFACE_PART(Authenticate)
    
    
    	BEGIN_INTERFACE_PART(ServiceProvider, IServiceProvider)
    		STDMETHODIMP QueryService(REFGUID guid, REFIID iid, LPVOID * ppv);
    	END_INTERFACE_PART(ServiceProvider)  
    
    	DECLARE_INTERFACE_MAP();
    };
    					
    MyOleControlSite.cpp
    #include "stdafx.h"
    #include "MyOleControlSite.h"
    
    BEGIN_INTERFACE_MAP(CMyOleControlSite, CHtmlControlSite)
    	INTERFACE_PART(CMyOleControlSite, IID_IAuthenticate, Authenticate)
    	INTERFACE_PART(CMyOleControlSite, IID_IServiceProvider, ServiceProvider)
    END_INTERFACE_MAP()
    
    ///////////////////////////////////////////////////////////////////////////// 
    // CMyOleControlSite: IAthenticate::IUnknown methods
    
    ULONG CMyOleControlSite::XAuthenticate::AddRef()
    {
    	METHOD_PROLOGUE(CMyOleControlSite, Authenticate)
    	return pThis->ExternalAddRef();
    }
    
    ULONG CMyOleControlSite::XAuthenticate::Release()
    {                            
    	METHOD_PROLOGUE(CMyOleControlSite, Authenticate)
    	return pThis->ExternalRelease();
    }
    
    HRESULT CMyOleControlSite::XAuthenticate::QueryInterface(REFIID riid, void **ppvObj)
    {
    	METHOD_PROLOGUE(CMyOleControlSite, Authenticate)
    	HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
    	return hr;
    }
    
    
    ///////////////////////////////////////////////////////////////////////////// 
    // CMyOleControlSite: Verificatiemethoden
    
    STDMETHODIMP CMyOleControlSite::XAuthenticate::Authenticate( 
        HWND __RPC_FAR *phwnd,
        LPWSTR __RPC_FAR *pszUsername,
        LPWSTR __RPC_FAR *pszPassword)
    {
    	METHOD_PROLOGUE(CMyOleControlSite, Authenticate)
    
    	// voeg code uit de volgende stap toe
    
    	return S_OK;
    }
    
    // 
    // IServiceProvider
    // 
    
    ULONG CMyOleControlSite::XServiceProvider::AddRef()
    {
    	METHOD_PROLOGUE(CMyOleControlSite, ServiceProvider)
    	return pThis->ExternalAddRef();
    }
    
    ULONG CMyOleControlSite::XServiceProvider::Release()
    {                            
    	METHOD_PROLOGUE(CMyOleControlSite, ServiceProvider)
    	return pThis->ExternalRelease();
    }
    
    HRESULT CMyOleControlSite::XServiceProvider::QueryInterface(REFIID riid, void **ppvObj)
    {
    	METHOD_PROLOGUE(CMyOleControlSite, ServiceProvider)
    	HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
    	return hr;
    }
    
    STDMETHODIMP CMyOleControlSite::XServiceProvider::QueryService(REFGUID sid, REFIID iid, LPVOID * ppv)
    {
     	METHOD_PROLOGUE(CMyOleControlSite, ServiceProvider)
    
    	if (sid == IID_IAuthenticate || iid == IID_IAuthenticate) {
    		return (HRESULT)pThis->ExternalQueryInterface(&iid, ppv);
        } else {
    		*ppv = NULL;
    	}
    		
    	return E_NOINTERFACE;
    }
    					
    ProxyTestView.h
    class CProxyTestView: public CHtmlView
    {
    ...
    	BOOL CreateControlSite(COleControlContainer* pContainer, 
    		COleControlSite** ppSite, UINT nID, REFCLSID clsid);
    					
    ProxyTestView.cpp
    BOOL CProxyTestView::CreateControlSite(COleControlContainer* pContainer, 
    	COleControlSite** ppSite, UINT nID, REFCLSID clsid)
    {
    	ASSERT(ppSite != NULL);
    	*ppSite = new CMyOleControlSite(pContainer);
    	return TRUE;
    }
    					
  4. Geef in de implementatie van de interface IAuthenticate een gebruikersnaam en wachtwoord op, zoals is weergegeven in het onderstaande voorbeeld:
    STDMETHODIMP CMyOleControlSite::XAuthenticate::Authenticate( 
        HWND __RPC_FAR *phwnd,
        LPWSTR __RPC_FAR *pszUsername,
        LPWSTR __RPC_FAR *pszPassword)
    {
    	METHOD_PROLOGUE(CMyOleControlSite, Authenticate)
    
    	CString strUsername = "Altoid/LocalAltoid";
    	CString strPassword = "Test123";
    	
    	WCHAR *wszDlgUser = (WCHAR *) CoTaskMemAlloc(255 * sizeof(WCHAR));
    	WCHAR *wszDlgPassword = (WCHAR *) CoTaskMemAlloc(255 * sizeof(WCHAR));
    	MultiByteToWideChar(GetACP(), 0, (const char*)strUsername, -1, wszDlgUser, 255);
    	MultiByteToWideChar(GetACP(), 0, (const char*)strPassword, -1, wszDlgPassword, 255);
    	*pszUsername = wszDlgUser;
    	*pszPassword = wszDlgPassword;
    	*phwnd = NULL;
    
    	return S_OK;
    }
    					
  5. Ga vanuit de functie OnInitialUpdate naar de pagina 'about:blank':
    void CProxyTestView::OnInitialUpdate()
    {
    	CHtmlView::OnInitialUpdate();
    	Navigate2(_T("about:blank"),NULL,NULL);
    }
    					
  6. Voeg een menuoptie en vervolgens een handler toe om naar een beveiligde URL te gaan, zoals is weergegeven in het onderstaande voorbeeld:
    void CProxyTestView::OnActionTest()
    {
    	Navigate2(_T("https://www.etrade.com"),NULL,NULL);
    }
    					
  7. Maak een build en test het project. U ziet dat de pagina niet gevonden wordt. Als u de pagina zodanig wijzigt dat deze naar een niet-beveiligde URL gaat, of als u de beveiligde URL bezoekt nadat u de niet-beveiligde URL hebt bezocht, lukt dit wel.

Referenties

Klik voor meer informatie op het volgende artikelnummer in de Microsoft Knowledge Base:
320153  (http://support.microsoft.com/kb/320153/NL/ ) Fout: Implementatie van IAuthenticate om het dialoogvenster Gebruikersnaam of Wachtwoord over te slaan (Het Engels)
Meer informatie over de klasse COleControlSite vindt u op de volgende Microsoft Developer Network-website:
http://msdn.microsoft.com/nl-nl/library/w9b4e0zd(en-us,vs.71).aspx (http://msdn.microsoft.com/nl-nl/library/w9b4e0zd(en-us,vs.71).aspx)
Zie de volgende MSDN-website (Microsoft Developer Network) voor meer informatie over de interface IAuthenticate:
http://msdn.microsoft.com/nl-nl/library/ms775080(en-us).aspx (http://msdn.microsoft.com/nl-nl/library/ms775080(en-us).aspx)
Zie de volgende Microsoft-websites voor meer informatie over het ontwerpen van weboplossingen voor Microsoft Internet Explorer:
http://msdn.microsoft.com/nl-nl/ie/default(en-us).aspx (http://msdn.microsoft.com/nl-nl/ie/default(en-us).aspx)

http://support.microsoft.com/iep (http://support.microsoft.com/iep)

De informatie in dit artikel is van toepassing op:
  • Microsoft Internet Explorer 6.0 Service Pack 1
Trefwoorden: 
kbautohotfix kbhotfixserver kbqfe kbqfe kbie600sp2fix kbbug kbfix kbie600presp2fix kbsecurity KB329802
 

Vertaalde artikelen