努力在MailKit中验证Outlook访问权限

时间:2016-08-09 11:16:11

标签: oauth-2.0 mailkit mimekit

MailKit提供的代码示例表明,访问IMAP邮箱需要与此类似的代码...

var at = "<<Access_Token>>";
using (var client = new ImapClient())
{
    client.Connect("imap-mail.outlook.com", 993, SecureSocketOptions.SslOnConnect);

    client.Authenticate("<<Email_Address>>", at);

    // do stuff...

    client.Disconnect(true);
}

现在,当使用此代码与GMail以及正确生成且未过期的访问令牌时,这是一种享受。

相同的代码,再次使用正确生成的访问令牌只会导致AuthenticationException: Invalid username or password.行上出现client.Authenticate

现在我已针对this网站进行了测试,我知道电子邮件地址和访问令牌值有效。我在Gmail中做错了什么?

[编辑] 我在this MSDN page上找到了......

的建议
  

您的应用/服务器将访问令牌传递给我们的IMAP服务   AUTHENTICATE命令。我们接受包含以下内容的base64编码字符串:

     
      
  • 用户名。
  •   
  • 直接OAuth 2.0请求的身份验证类型承载。
  •   
  • MSA授予的访问令牌。
  •   
     

例如,你的   app / server将base-64编码此字符串:

     

user={user@domain.com}^Aauth=Bearer {Access Token}^A^A

     

,其中   {user@domain.com}是用户的帐户,{Access Token}是访问权限   MSA授予的令牌,^ A是Ctrl-A字符(U + 0001)。

但是,我尝试使用创建建议的字符串并将其作为client.Authenticate()中的“密码”值传递无效。

1 个答案:

答案 0 :(得分:0)

作为OAuth2.0流程的一部分,您需要根据https://technet.microsoft.com/en-ca/dn440163

将范围参数指定为wl.imap,wl.offline_access

可能还需要其他范围,例如wl.emailwl.basic,但根据我自己对我所阅读的文档的理解,它们不应该是必要的。