有没有办法将当前Windows用户的凭据传递给LyncClient.Submit()

时间:2011-03-01 16:40:58

标签: c# login credentials suppress lync

我正在创建一个In / Out系统托盘应用程序,它通过Microsoft Lync API与Microsoft Lync Server交互。有没有办法将当前Windows用户的用户名和密码传递给Lync API,这样用户就会自动登录而不是让他们每次都输入凭据?

1 个答案:

答案 0 :(得分:2)

不,不像,例如访问Web服务时,无法强制Lync使用登录的用户凭据。第一次在计算机上运行Lync客户端时,您可以看到这一点 - 即使您以域用户身份登录到计算机,也会提示您输入域凭据。

但是,所有内容都不会丢失,因为Lync(默认情况下)会在输入时保存凭据,然后每次以该用户身份登录时将其呈现给服务器。您可以检查Lync是否设置为在注册表中保存密码:

[HKEY_CURRENT_USER\Software\Microsoft\Communicator]
"SavePassword"=dword:00000001

要在API中利用此功能,您需要:

  1. 以通常的方式初始化客户
  2. 注册lyncClient.CredentialRequested事件
  3. 调用lyncClient.BeginSignIn,传递用户登录的sip uri(为方便起见,lyncClient.Uri属性通常设置为上次登录的用户的uri)。为用户名和密码传递null。
  4. 现在 - 如果您的用户之前未登录过Lync(或您的应用),您将收到CredentialRequested事件。

    1. 使用CredentialRequestedEventArgs.Cancel()
    2. 取消活动
    3. 显示一些用户界面以收集用户的用户名和密码,然后使用这些凭据调用BeginSignIn
    4. 或者,使用null用户名和密码调用BeginSignIn,然后处理CredentialRequested,并使用CredentialRequestedEventArgs中的Submit方法将凭据提交给服务器(Submit方法中的最后一个参数必须设置为True以保存密码)< / LI>

      (我不记得我最喜欢上面2或3中哪种方法是推荐的方法 - 最好同时尝试两种方法,看看你最幸运的是哪种方法)

      下次该用户登录时(假设在注册表中将SavePassword设置为true),将传递保存的凭据,因此用户将在不触发CredentialRequested事件的情况下登录。

      This MSDN article很好地介绍了这个过程(我假设您在UI Supressed模式下运行Lync,因为这只是在压缩模式下的一个问题)