我使用MFC中的CHttpFile
来执行http请求。需要身份验证时,我使用ErrorDlg
(InternetErrorDlg
)弹出用户/密码对话框。该对话框有一个用于保存凭据的复选框。但这仅在我的进程运行时才有效。重新启动该过程后,必须再次输入凭据。
我想使用Windows凭据管理器中的凭据自动为已配置的服务器选择凭据。
CHttpFile
或WinInet-API可以使用Windows凭据管理器中的凭据吗?
这演示了我目前如何使用API:
CInternetSession session(_T("myapp"), 1);
DWORD dwOpenFlags = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_SECURE;
CHttpConnection *pServer = session.GetHttpConnection(_T("some server"), dwOpenFlags, 443);
if(NULL != pServer)
{
CHttpFile *pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, _T("some URL"), NULL, 1, NULL, NULL, dwOpenFlags);
if(pFile != NULL)
{
if(!pFile->AddRequestHeaders(_T("some headers")))
{
// error handling...
}
if(!pFile->SendRequest())
{
// error handling...
}
DWORD dwStatus = 0;
pFile->QueryInfoStatusCode(dwStatus);
if(dwStatus == HTTP_STATUS_DENIED)
{
// can I do something here or before the SendRequest call
// to use credentials from the Windows Credential manager?
dwStatus = pFile->ErrorDlg(NULL, ERROR_INTERNET_INCORRECT_PASSWORD,
FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS |
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA);
}
}
}