如何使用NTLM身份验证访问共享邮箱

时间:2013-10-07 14:12:42

标签: imap sspi

我正在尝试使用IMAP访问Exchange中的共享邮箱,但我不想将密码存储在应用中,因此我尝试了NTLM身份验证。

我能够使用SSPI框架api进行身份验证,但现在我很难选择共享的收件箱。

使用“基本”身份验证,我知道我可以做到:

  a LOGIN domain/username/mailboxalias username_password //a OK LOGIN completed.
  b select inbox //...\r\nb OK [READ-WRITE] SELECT completed."

这样做很好,但我不想将密码存储在我的应用程序中,所以我使用的是NTLM auth(连接到存储邮箱的exchangeserver1.domain.com):

  a AUTHENTICATE NTLM  // +
  <type_1_msg>  // + <type_2_msg>
  <type_3_msg> // a OK [REFERRAL imap://;AUTH=*@exchangeServer2.domain.com/] AUTHENTICATE completed.
  b select inbox // b NO [REFERRAL imap://;AUTH=*@exchangeServer2.domain.com/inbox] There is no replica for that mailbox on this server."
  c select mailboxalias //c NO There is no replica for that mailbox on this server.
  d select mailboxalias/inbox //d NO There is no replica for that mailbox on this server.
  e select inbox/mailboxalias //e NO There is no replica for that mailbox on this server.

当前上下文用户邮箱存储在exchangeserver2中,但共享邮箱位于exchangeserver1中,这就是为什么在NTLM中你会看到REFERRAL文件,但在上述两种情况下我都连接到exchangeserver1。

我使用'邮箱别名'和'收件箱'尝试了select命令的几种变体但没有效果。我有权访问邮箱,我是它的所有者,我可以从Outlook访问它(但我相信它使用MAPI)和'基本身份验证'。

身份验证后,如何选择共享邮箱收件箱?

我正在使用以下AcquireCredentialsHandle调用来生成NTLM类型1消息:   AcquireCredentialsHandle(null,“NTLM”,2,0,0,0,0,ref phCredential,ref ptsExpiry)

我甚至尝试将第一个参数(可能是用户名)从null(当前上下文用户)更改为“domain / username / mailbox”,但它不起作用。

谢谢:)

0 个答案:

没有答案