**

前言:

**
最近刚好在一个技术群里看到有管理员咨询了一个Outlook客户端频繁弹密码的问题,大家给出的建议就是查服务器端的各种配置。从个人角度,我觉得这些建议是对的,但是并不能很好的帮助我们排障。
其实,Outlook弹身份验证密码框是一个挺麻烦的问题,主要是因为:

  • 弹框问题不太能够重现,可能需要好几天才出现一次;
  • 有时候是全公司大面积弹框,但是又是随机的,你永远不知道下一个会受到弹框问题的用户会是谁;
  • 弹框的时候很难抓到网咯包进行分析,即使抓到了,但是因为是加密连接,需要先解密才能看到更深入的原因。等等。

在微软做Support Engineer时,大家在接到这种case的时候普遍第一反应就是头很大。运气好点,用户自己就莫名其妙好了,运气不好一做就是个把月也是正常的。曾有一位同僚分享过一张处理此类issue的时候需要了解的问题清单,差不多有20多条,譬如单个用户,多个用户,Outlook版本等等。这些问题都是帮助我们工程师来定位问题的,究竟发生在客户端、传输过程中还是服务器端的,然后再从这个点上着手处理。

离开微软一年多了,许多知识点已经开始模糊了,所以打算在彻底遗忘之前,将相关的知识点梳理一遍。这些知识点都是来自微软的内部技术培训的,因为内部培训资料不可以外泄,所以我只能根据自己理解的整理下来。也乘此机会分享给大家,希望能对大家在着手处理此类问题的时候有所帮助。如果有什么不正确的地方,也请指出,我会进行修改。

可能有小伙伴看到过一种解决Outlook弹框问题的方法是修改注册表。但是其实这种方法是只适用于Outlook 2003,2007的。这种解决方法是通过

  • 增加允许Outlook验证失败的次数,或
  • 增加Outlook连接超时的时间

从而达到减少验证弹框的概率性。但是从Outlook 2013开始,代码里已经没有这些注册表了。所以这种修改注册表的方法已经不再适用了。

内容:

一、 Exchange 2013工作原理图
首先,我们先看一下Outlook如何与Exchange 2013建立连接的过程图。其实每次打开Outlook的时候都是会重现去刷一遍Autodiscover。但是2016使用的MAPI OVER HTTP走的是MSO stack,整个流程会有些不太一样,可惜,我离开MS的时候,未能有幸听到有人讲解过,所以无法在此分享了。

二、简述Outlook认证
Outlook与服务器之间的连接有很多种,RPC、Http、Outlook Anywhere、Autodiscover、OAB、EWS等等。每个请求连接都是需要验证用户身份的,只有经过授权的用户才能够建立请求。所以Outlook弹身份验证框都是在建立请求的时候发生的。

验证的时候,会根据连接协议去找相应的服务器,然后建立相应的连接。RPC会去找Server name,transport type,Http会去找Http Url,建立请求以后就会需要去pick credential,将credential绑在RPC binding里面再去与服务器做negotiate。服务器会根据设置的支持的验证方式(NTLM、Kerberos等)对请求包内的验证信息去进行验证。如果成功了,就验证通过,如果失败了,就会返回。返回以后不是立即就失败的,它会根据代码函数中设定的选项和逻辑从OS缓存里找credential,然后一个个去验证一遍。

Outlook验证代码函数里获取credentials有以下4个选项:
(1). Return cached credentials
(2). Return MANUAL credentials from the keyring
(3). Return desktop credentials
(4). Prompt the user and return user-supplied credentials

直到代码内设定的步骤根据运行逻辑全部运行完毕,如果结果依然是验证失败,Outlook就会对用户弹出验证框请求用户手动输入身份认证信息。

所以,Outlook弹密码框一定是之前某个步骤里有请求验证失败才会导致的。

验证是由OS里的credential manager管理的,但是存放在Windows里的credentials是跨进程使用的,并不是一个应用单独对应一个credential。举个例子,用户打开Lync的时候,Lync应用需要credential,就会从Windows里去取,取的时候会先将这个credential临时锁定,验证完成了再释放锁定进程状态。如果此时Outlook也需要取credential,就只能先排队等着。所以,我们发现有时候用户遇到的弹密码框问题不一定是密码不正确,而是Outlook从OS缓存里一直取不到密码,被其他进程一直抢占锁死了。

三、Outlook弹框原因小结
Outlook弹验证框的原因总结起来有4个方向:

  1. Outlook本身密码的问题
    (1). 用户勾选了"always prompt for logon credentials",这样就会经常弹框。
    (2). 用户的密码在服务器端做了修改,服务器也会要求重新做验证。
    (3). Windows里错误的用户名/密码缓存导致了反复需要验证,可以通过清除凭证管理来解决。
  2. 网络问题
    (1). 在不稳定的网络环境中,或者出现网络切换(有线无线切换)时,由于Outlook 丢失了连接,它就会要求客户重新输入验证。
    (2). 当Outlook运行时电脑进入了sleep或者hibernation模式,导致Outlook网络连接出现中断,当再次恢复时会需要用户重新输入验证。
    (3). 当outlook从快速网络切换到慢速网络时,导致MAPI向Https切换,也会要求重新验证。
  3. 第三方Outlook插件导致的弹框问题,可以使用outlook /safe启用安全模式来排查。
  4. 服务器验证失败
    (1). 前端CAS的负载均衡导致重复验证弹框(这个可以通过直连一台CAS来缩小问题范围)。
    (2). Exchange服务器出现连接负载过高时,其会拒绝新的连接或者验证,这个时候也会出现弹框现象。
    (3). Exchange服务器出现NTLM验证瓶颈时:
    · Exchange相关的服务(AutoDiscover, EWS, OAB, OA)拒绝请求
    · 当IIS验证方式不符导致验证失败,(如IIS只支持basic认证,不支持NTLM时验证失败)

四、故障排查思路及方向

客户端

针对客户端,以下1-4个步骤是一定要去做的:

  1. 清理Windows内的凭证。
    打开“控制面版” > "凭据管理器”
  2. Outlook安全模式,排除第三方插件引起的问题。
    打开“运行”,输入Outlook.exe /safe,然后点“确定”
  3. SARA Tool
    OffCAT工具已经融入到了SARA Tool内了,具体可以查看这篇文档:
    How to scan Outlook by using the Microsoft Support and Recovery Assistant
  4. 查看问题发生时候的Outlook连接状态
    按住 CTRL键,并单击通知区域中的Microsoft Outlook图标,然后点击“连接状态”。

    在这里我们能看到当前的Outlook连接状态,可以看出是连接到directory、GC、Mail还是public folder的时候发生了问题。具体内容可以查看以下文档:(这篇文档请一定要看英文版,中文版内的内容有缺少)
    Description of the Connection Status dialog in Outlook
    如下图,可以看到我的账户因为在Exchange Directory里已经被移除了,所以就连接不上了。

    当然,如果问题比较频发重现,可以先抓个网咯包先分析一下。但是这个就有点随缘份了。
    如果以上步骤依然无法帮助你解决和找到问题的点,那就需要抓ETL日志了,因为ETL日志是需要用微软内部的Timber工具转换以后才能分析的,你只能交给微软的工程师去做啦。(纯On-premise环境的客户就要花钱啦!)
    开启的方法请查看以下文档:
    How to enable global and advanced logging for Microsoft Outlook

服务器端

在出现用户大面积发生弹框的时候一定要注意检查以下1-4点:

  1. 检查CAS服务器是否都处于正常运行的状态。

  2. AD上是否有Event ID 2080的事件日志,Netlogon服务是否正常工作。
    Event ID 2080 from MSExchangeDSAccess

  3. Exchange服务器的默认配置是否被更改过,如AutoDiscover, EWS, OAB, OA URL/Authentication。

  4. MaxConcurrentAPI
    国内绝大多数公司都是没有在Exchange上配置Kerberos认证的,所以Exchange的认证走的都是NTLM。当NTLM验证达到了瓶颈时就会出现弹框问题。具体可以查看以下几篇文档:
    Windows: Configuring MaxConcurrentAPI for NTLM Pass-Through Authentication
    Easy Checking for MaxConcurrentApi Problems
    间歇性地提示输入凭据或连接到身份验证服务时遇到超时
    如何通过使用 MaxConcurrentApi 设置,性能调优的 NTLM 身份验证

  5. RCA、IIS Log
    RPC Client Access (RCA) Logs路径:%ExchangeInstallPath%\Logging\RpcClientAccess
    IIS默认路径:%SystemDrive%\inetpub\logs\LogFiles

  6. Load Balance设备将请求破坏或阻止了(尤其是外网弹框内网不弹框的情况下)

  7. 如果用户开启了Kerberos验证的,可以查看Kerberos日志

因为Outlook验证是比较复杂的,针对不同的问题进行的解决方法也是不同的,以上步骤希望能够帮助到管理员快速的定点到问题的故障点。

解析:Outlook弹框问题相关推荐

  1. vue 定义全局弹框_VUE路由拦截:Vue自定义全局弹窗组件

    前言 在任何一个平台中,如果需要增加用户黏度,除了用户需要的基本内容外,用户登录注册提交信息也是非常重要的一环,可以了解用户基本信息,用户喜欢等. 抛出前后端混合开发外,vue可以轻松的实现路由拦截. ...

  2. 自定义IOS系统弹框

    写在之前 系统的弹框虽然很好看,但是有时候无法完全满足UI设计的需求,比如说中间要显示一个输入框,或者要放置一张图片,这里介绍一个很早之前的自定义弹框库,这个自定义弹框sdk写的很细致,定制性很强,几 ...

  3. Android Study 之通过DialogFragment玩转高仿IOS弹框~ ^.^

    LZ-Say:在努力向前奔跑的途中,不要忘记让自己始终保持一个良好的状态,一颗初心,一颗永不言弃的心,一起加油` 前言 LZ虽说是搞Android的,但是对IOS的风格样式甚是酷爱,感觉简约大方,而今 ...

  4. 解决 layui 弹出层(弹框)一闪而过就消失的问题 (转载)

    问题解决 转载: 原文链接:https://blog.csdn.net/qq_20594019/article/details/83956532 本人遇到问题:使用layer.open()弹出页面层, ...

  5. vue懒加载对话框API封装技巧(项目必备技能,适用于各种需要懒加载动态展示的弹框组件)

    懒加载对话框的方式做到了在你调用弹框展示API的那一刻,才去加载对话框文件并最终显示弹框效果.它最大的意义在于减少了你初次进入页面时加载的文件资源请求量和大小(加载资源小了,网页加载速度自然就提升了) ...

  6. 图片上传时,QQ浏览器会弹出下载弹框的解决方案

    在做这次的欢乐购车季项目中,出现了一个以前没有遇到的问题,就是点击上传按钮,QQ浏览器会弹出下载框,非常讨厌.从网上查了很多资料,虽然大家对QQ浏览器带给前端的麻烦是深恶痛绝,但是没办法,还得想办法解 ...

  7. ios wkwebview弹框_iOS 加载WKWebView

    WKWebView是苹果在iOS 8之后推出的框架WebKit中的浏览器控件, 其加载速度比UIWebView快了许多, 但内存占用率却下降很多, 也解决了加载网页时的内存泄露问题. WKWebVie ...

  8. Android Dialog 弹框之外的区域 默认透明背景色修改

    就是下面弹框之外的颜色值 透明度修改 一般弹框外的区域的不是全透明  都有一个默认的值使用的属性为 setDimAmount 这个默认值是0.5 这个值的范围在 0-1 之间 如果设置为1 就是全黑色 ...

  9. popWindow 出现点击上下空白区域消失点击左右空白区域不消失弹框的处理方法

    一般默认是消失的,但是自己的项目中出现点击上下弹框可以消失,点击左右弹框不消失 最后自己发现了问题如下 popupWindow = new PopupWindow(brief_view, FrameL ...

最新文章

  1. 捅破窗户纸:如何从过程到对象—For金色的海洋以及所有为面向对象而困惑的Tx...
  2. idea 查看一个类的子类_Java-05-多态、抽象类、接口和内部类
  3. Django框架(17.Django中的元选项)
  4. c#中字节数组byte[]、图片image、流stream,字符串string、内存流MemoryStream、文件file,之间的转换
  5. Windows部署服务WDS实例
  6. Qt 生成bin文件
  7. 中台到底是什么?传统企业怎样建设中台?
  8. 信息安全实验三 :PGP邮件加密软件的使用
  9. android短信接收处理和发送
  10. zlib库使用简单讲解
  11. java向手机号发送短信验证码
  12. 判断自定义异形view的点击事件是否在绘制区域内
  13. 随机搜索(Random Searching)算法
  14. 【思考题】新客老客定义
  15. 2022年高新技术企业认定的补贴有多少?
  16. Docker 入门(二)常用命令纯手敲带测试结果
  17. corosync+pacemaker+web集群
  18. RedisBloom 插件布隆过滤器,布谷鸟过滤器,Count-Min Sketch,TOPK使用详解
  19. BTA分论坛现场直击|区块链与投资,不是“钱”那么简单!
  20. 北大核心+CSCD期刊《电光与控制》投稿经验分享,2023年4月最新

热门文章

  1. 【Oracle 12c Flex Cluster专题】—节点角色转换
  2. JS 和 CSS 是如何影响页面渲染的?
  3. cephfs创建和删除pool
  4. 金蝶K3WISE常用数据表(整理)
  5. 大数据可视化热门工具
  6. Android加载长图,仿微博长图滚动查看
  7. IDEA运行main方法报Command line is too long解决方法
  8. WIN10系统内存占用80%以上的解决方案,导致电脑一卡一卡的
  9. 用Java写一个解一元二次方程的程序
  10. mac系统安装手机安装包