3

(一部の構成では) ユーザーが Windows 資格情報を入力してリモート サービスへの認証に使用できるようにする C# Web アプリケーションがあります。これを実現するために、現在、LogonUserを呼び出し、結果のトークンを使用して WindowsIdentity を作成し、それを偽装しています。特に問題もなく順調に動いています。

最近、私は Web 認証について読んでいて、基本認証の場合、IIS はLsaLogonUserを使用して偽装コンテキストを作成することを読みました。この 2 つの違いはある程度理解できますし、LsaLogonUser を使用する必要があるようにも思えますが、理解できない変更を加えて不明確なメリットを得るのは嫌いです。一方で、IIS に取り組んでいる人たちは、私よりも Windows API をよく理解しています。

では、どの関数が Web アプリケーションにより適しているでしょうか? LogonUser を使用するのは間違っていると思いますか? その理由は? 一方が機能し、他方が機能しない状況 (ネットワーク構成、ユーザー権限など) はありますか? LogonUser を使用することは、何らかのセキュリティ上のリスクがありますか?

4

1 に答える 1

5

あなたの質問には多くの質問があります。ここにそれらすべての簡単な答えがあり、その後にいくつかの詳細が続きます。

  1. .NetのWebアプリケーションはを使用する必要がありますLogonUser。これは、サンプルコードを含むMicrosoftナレッジベースの記事です
  2. 使用しても大丈夫LogonUserです、何も問題はありません。これは、ほとんどの場合に使用する必要がある関数です。
  3. LogonUserKerberos Services 4 User(S4U)はサポートしていませんが、サポートしてLsaLogonUserいます。より歴史的なメモでは、LogonUser以前はTCB特権が必要でしたが、現在は必要ありません(Passportログオンを除く)。とにかくそれを回避する賢い方法がありました(「そのページのSSPIの別の使用法」を探してください)。
  4. 同じリスクが両方の機能に適用されます。エラーメッセージやログなどにパスワードをこぼしてはなりません。ただし、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を使用する理由がわかりません。

あなたのコードはそのままで良いです;)

于 2012-09-28T16:48:25.637 に答える