CHttpFile或HttpSendRequest可以使用Windows凭证管理器吗?

时间:2016-08-23 09:05:57

标签: winapi mfc wininet

我使用MFC中的CHttpFile来执行http请求。需要身份验证时,我使用ErrorDlgInternetErrorDlg)弹出用户/密码对话框。该对话框有一个用于保存凭据的复选框。但这仅在我的进程运行时才有效。重新启动该过程后,必须再次输入凭据。

我想使用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);
    }
  }
}

0 个答案:

没有答案