Help and Support
 

powered byLive Search

BUG: Proxyverificatie via IAuthenticate mislukt op beveiligde URL

Artikel ID:329802
Laatste beoordeling:maandag 25 december 2006
Wijziging:6.1
Op deze pagina
Belangrijk De hotfix die in dit artikel wordt beschreven, is vervangen door de Critical Update 813951. Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over deze update:
813951 (http://support.microsoft.com/kb/813951/)U krijgt geen toegang tot uw MSN-e-mailaccount of u kunt niet verifiëren bij een website in diverse programma's

Naar boven

Symptomen

Wanneer u in een host met een webbrowserbesturingselement voor het eerst naar een beveiligde URL navigeert via een proxyserver waarvoor verificatie vereist is en u de verificatiereferenties opgeeft via de interface IAuthenticate, wordt een foutbericht weergegeven dat de pagina niet is gevonden. Belangrijke opmerking
813951 (http://support.microsoft.com/kb/813951/)
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.

Naar boven

Oplossing

Microsoft heeft nu een ondersteunde hotfix voor dit probleem beschikbaar gesteld. Deze hotfix is echter alleen bedoeld om het probleem te verhelpen dat in dit artikel wordt beschreven. Voer de hotfix alleen uit op systemen waarop dit specifieke probleem zich voordoet. Deze hotfix moet wellicht extra worden getest. Als u geen ernstige hinder van dit probleem ondervindt, raadt Microsoft u daarom aan te wachten op het volgende servicepack voor Internet Explorer 6,0 waarin deze hotfix is opgenomen.

Als u dit probleem direct wilt verhelpen, kunt u contact opnemen met Microsoft Product Support Services om de correctie te verkrijgen. Een volledige lijst met telefoonnummers van Microsoft Product Support Services en informatie over kosten van ondersteuning vindt u op de volgende Microsoft-website:
http://support.microsoft.com/contactus/?ws=support (http://support.microsoft.com/contactus/?ws=support)
Opmerking In speciale gevallen kunnen kosten die normaal verbonden zijn aan ondersteuningsoproepen, worden geannuleerd als een medewerker van Microsoft Product Support Services van mening is dat een specifieke update de oplossing van uw probleem is. De normale ondersteuningskosten blijven gelden voor extra ondersteuningsvragen die niet in aanmerking komen voor de specifieke update in kwestie.

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 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
   ---------------------------------------------------------
   19-nov-2002  23:22:38  6.0.2800.1139  483.328  Urlmon.dll
				

Naar boven

Status

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

Naar boven

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.

Naar boven

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 Microsoft Foundation Classes (MFC)-klassetoepassing van het type CHtmlView 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 aangegeven 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 aangegeven 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.

Naar boven

Referenties

Klik voor meer informatie op het volgende artikelnummer in de Microsoft Knowledge Base:
320153 (http://support.microsoft.com/kb/320153/)BUG: Implementatie van IAuthenticate om dialoogvenster Gebruikersnaam of Wachtwoord over te slaan
Meer informatie over de klasse COleControlSite vindt u op de volgende Microsoft Developer Network-website:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vcrefCOleControlSite.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vcrefCOleControlSite.asp)
Meer informatie over de interface IAuthenticate vindt u op de volgende Microsoft Developer Network-website:
http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/moniker/reference/ifaces/iauthenticate/iauthenticate.asp (http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/moniker/reference/ifaces/iauthenticate/iauthenticate.asp)
Raadpleeg de volgende websites voor meer informatie over het ontwerpen van weboplossingen voor Microsoft Internet Explorer:
http://msdn2.microsoft.com/en-us/ie/default.aspx (http://msdn2.microsoft.com/en-us/ie/default.aspx)

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

Naar boven


De informatie in dit artikel is van toepassing op:
?Microsoft Internet Explorer 6.0 Service Pack 1

Naar boven

Trefwoorden: 
kbhotfixserver kbqfe kbqfe kbie600sp2fix kbbug kbfix kbie600presp2fix kbsecurity KB329802

Naar boven

Vertaalde artikelen

 

Related Support Centers

Other Support Options

  • Need More Help?
    Contact a Support professional by E-mail, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.