質問

NTLM 資格情報を使用して呼び出される ASPX ページ (サーバー A 上) があります。そのページのジョブの一部は、HTML ページ (サーバー B 上) を呼び出し、それをクライアントにプロキシして返すことです。(ファイアウォールは A へのアクセスを許可しますが、B へのアクセスは許可しません。通常、ユーザーは両方のサーバーへのアクセスを許可されます)。サーバー B も匿名アクセスに対してオープンではないため、サーバー B に資格情報を提供する必要があります。

一部の資格情報を (添付のコードに従って) ハードコーディングすると機能しますが、理想的には、.aspx ページで受信した資格情報をエコーし​​ます。これらの NetworkCredentials を取得して渡す方法はありますか?

protected void Page_Load(object sender, EventArgs e) { 
    Response.Clear(); 
    WebClient proxyFile = new WebClient(); 
    CredentialCache cc = new CredentialCache(); 
    cc.Add(new Uri("http://serverB/"), "NTLM", 
        new NetworkCredential("userName", "password", "domain")); 
    proxyFile.Credentials = cc; 

    Stream proxyStream = proxyFile.OpenRead("http://serverB/Content/webPage.html"); 
    int i; 
    do { 
        i = proxyStream.ReadByte(); 
        if (i != -1) { 
            Response.OutputStream.WriteByte((byte)i); 
        } 
    } while (i != -1); 
    Response.End(); 
} 
役に立ちましたか?

解決

確かに発信者のログイン名は取得できますが、パスワードは取得できません。NTLM はチャレンジ/レスポンス メカニズムを使用するため、パスワードが送信されることはありません。チャレンジを作成して応答を確認するには、サーバーはパスワード相当物 (ハッシュ) にアクセスする必要がありますが、たとえそれを入手できたとしても、そのパスワード相当物は、次のような資格情報を形成しようとする場合には役に立ちません。サーバー B によって受け入れられます。

別の回答で説明されているように、偽装を設定できる場合でも、必ずしも希望どおりの結果が得られるわけではありません。デフォルトでは、偽装サーバー プロセスがその ID を別のサーバーに送信することは許可されていません。この 2 番目のホップは委任として知られており、関係するサーバー (および/または Active Directory) で明示的に構成する必要があります。

委任とは別に、唯一の選択肢は、サーバー A がアクセスしてサーバー B に提示できる資格情報のデータベースを維持することだと思います。これを安全な方法で構築するのは、複雑で時間のかかるプロセスです。一方、委任がデフォルトで無効になっているのには理由があります。サーバーにログインするときに、他のサーバーにアクセスするために自分の ID を使用できるようにしたいですか?委任は最も簡単なオプションですが、サーバー A が侵害されてユーザーの ID に対して無責任な行為が行われないようにする必要があります。

他のヒント

Page.User は、ページを実行しているユーザーのセキュリティ プリンシパルを取得します。

そこから、それを理解できるはずです。

あなたのシナリオでは、発信者の身元を偽ることはできますか?そうすれば、資格情報を渡す必要さえなくなります。例:

<authentication mode="Windows" />
<identity impersonate="true" />

サーバーAのweb.config内。ただし、サーバー A ではそれを望まない場合もあるため、これは状況によって異なります。ただし、可能であれば、カスタム コードを使用せずに問題を解決できる可能性があります。

偽装を設定するためのリンクは次のとおりです。 http://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingorigcaller

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top