我正在创建一个通过 Microsoft Lync API 与 Microsoft Lync Server 交互的 In/Out 系统托盘应用程序。有没有办法将当前 Windows 用户的用户名和密码传递给 Lync API,以便用户自动登录,而不是让他们每次都输入凭据?
2032 次
1 回答
2
不,与访问 Web 服务不同,没有办法强制 Lync 使用已登录的用户凭据。当您第一次在计算机上运行 Lync 客户端时,您可以看到这一点 - 即使您以域用户身份登录到计算机,系统也会提示您输入域凭据。
但是,一切都不会丢失,因为 Lync(默认情况下)会在输入凭据时保存它们,然后在每次以该用户身份登录时将它们呈现回服务器。您可以检查 Lync 是否设置为在注册表中保存密码:
[HKEY_CURRENT_USER\Software\Microsoft\Communicator]
"SavePassword"=dword:00000001
要在 API 中利用这一点,您需要:
- 以通常的方式初始化客户端
- 注册 lyncClient.CredentialRequested 事件
- 调用 lyncClient.BeginSignIn,传递登录用户的 sip uri(为方便起见,lyncClient.Uri 属性通常设置为上次登录用户的 uri)。为用户名和密码传递 null。
现在 - 如果您的用户之前没有登录到 Lync(或您的应用程序),您将收到一个 CredentialRequested 事件。
- 使用 CredentialRequestedEventArgs.Cancel() 取消事件
- 显示一些 UI 以从用户那里收集用户名和密码,然后使用这些凭据调用 BeginSignIn
- 或者,使用 null 用户名和密码调用 BeginSignIn,然后处理 CredentialRequested,并使用 CredentialRequestedEventArgs 中的 Submit 方法将凭据提交给服务器(必须将 Submit 方法中的最后一个参数设置为 True 才能保存密码)
(我不记得上面 2 或 3 中的哪种方法是推荐的方法 - 最好尝试两种方法,看看哪种方法最幸运)
下次用户登录时(假设 SavePassword 在注册表中设置为 true),保存的凭据将被传递,因此用户将登录而不会触发 CredentialRequested 事件。
这篇 MSDN 文章很好地介绍了该过程(我假设您在 UI 抑制模式下运行 Lync,因为这只是抑制模式下的问题)
于 2011-03-01T17:50:16.987 回答