控制台应用中OAuth2+MailKit实现Office365邮件读取鉴权问题排查
解决Office365 OAuth2认证后Account为空导致邮件读取失败的问题
必须绑定特定用户身份
不管用PublicClientApplicationBuilder还是ConfidentialClientApplicationBuilder,如果是读取指定用户的邮件,认证流程里必须明确关联目标邮箱账号。之前的代码只拿了令牌,没在请求里绑定用户,所以authToken.Account是空的——服务端不知道要对应到哪个邮箱。Scope匹配认证场景
用https://outlook.office365.com/.default属于应用权限,这种令牌默认不绑定特定用户(除非请求时加login_hint或username参数)。如果是读特定用户邮件,优先用委托权限的Mail.Read这类scope,同时在认证请求里传入目标邮箱作为username,让服务端返回关联该用户的Account数据。SaslMechanismOAuth2的身份要求
SaslMechanismOAuth2必须要有明确的用户标识(邮箱)才能完成和邮件服务器的校验,就算令牌有效,缺了用户名绑定也会认证失败。之前的问题就是依赖空的authToken.Account.UserName,手动传目标邮箱补上身份信息才成功。认证请求补充用户参数
构建客户端时,可以通过.WithUsername("目标邮箱地址")指定用户,这样认证后返回的authToken.Account会自动填充用户信息,不用手动传邮箱。
内容的提问来源于stack exchange,提问作者Mit Jacob
相关产品推荐
相关产品推荐

