Microsoft Lync API を介して Microsoft Lync Server とやり取りする In/Out システム トレイ アプリケーションを作成しています。現在の Windows ユーザーのユーザー名とパスワードを Lync API に渡して、ユーザーが毎回資格情報を入力する代わりに自動的にログインする方法はありますか?
1 に答える
いいえ、たとえば 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 を実行していると想定しています)。