あなたの質問には多くの質問があります。ここにそれらすべての簡単な答えがあり、その後にいくつかの詳細が続きます。
- .NetのWebアプリケーションはを使用する必要があります
LogonUser
。これは、サンプルコードを含むMicrosoftナレッジベースの記事です。
- 使用しても大丈夫
LogonUser
です、何も問題はありません。これは、ほとんどの場合に使用する必要がある関数です。
LogonUser
Kerberos Services 4 User(S4U)はサポートしていませんが、サポートしてLsaLogonUser
います。より歴史的なメモでは、LogonUser
以前はTCB特権が必要でしたが、現在は必要ありません(Passportログオンを除く)。とにかくそれを回避する賢い方法がありました(「そのページのSSPIの別の使用法」を探してください)。
- 同じリスクが両方の機能に適用されます。エラーメッセージやログなどにパスワードをこぼしてはなりません。ただし、LsaLogonUserはパスワードなしでトークンを取得できるため、特定の状況でより安全になります。
回答2、3、4の詳細
LogonUserを使用しても問題ありません
ユースケースをサポートしている場合は、LsaLogonUserではなくLogonUserを使用する必要があります。ほとんどの場合、そうなるので、LogonUserを使用します。LsaLogonUserは機能しますが、多くのパラメーターがあり、特定の形式でなければならないメモリへのポインターもあります。言い換えれば、LsaLogonUserは、構造体と自己相対ポインターをパックしたときにC開発者によって作成されました...わかりません。涼しい ?
LsaLogonUserは、パスワードなしでトークンを提供できます(S4U)
Windows Server 2003では、Kerberos Services for User(S4U)が導入されました。S4Uを使用すると、パスワードを入力しなくても、KDCを呼び出してユーザーのトークンを取得できます。そのトークンは識別トークンであり、ユーザーになりすますために使用することはできません。LogonUserはそのトークンを提供できませんが、LsaLogonUserは提供できます。
キース・ブラウンは、S4Uとは何か、そしてこれまで以上に使いこなす方法を説明しています。
結論は
LsaLogonUserがLogonUserよりも優れているユースケースは1つだけです。しかし、WindowsIdentityはその(S4U)のコンストラクターを提供するため、.NetアプリケーションでLsaLogonUserを使用する理由がわかりません。
あなたのコードはそのままで良いです;)