ものがたり(旧)

atsushieno.hatenablog.com に続く

NetworkCredentialの怪

しばらく調べているのだけど、どうしてもCredentialCache.DefaultCredentialsと同等のNetworkCredentialが作れなく困っている。何かヒントがあったらおせえてくださいませ。

書いているのはこんなコード:


public static void Main (string [] args)
{
WebRequest r = WebRequest.Create (args [0]);
r.Credentials = new NetworkCredential (
username, password, domain);
//r.Credentials = CredentialCache.DefaultCredentials;
Stream s = r.GetResponse ().GetResponseStream ();
Console.WriteLine (new StreamReader (s).ReadToEnd ());
}

これでargs[0]で指定した、Windows統合認証を要求するサイトにアクセスする。コメントアウトしている行を有効にすると動作するので、コードそのものに問題は無さそうなのだけど、明示的にNetworkCredentialを作ると受け容れてもらえない。

ドメインには属していないので、KerberosではなくNTLMでやってくれると思っているのだけど(Firefoxからも認証できている)。domainはString.Emptyでもマシン名でも"WORKGROUP"でもダメだし、usernameは"hoge"でもUPNでもダメ。同じuser/pass/domainの組み合わせでProcess.Start()は出来ているし(ただProcess.Start()は間違ったドメイン名も無視するみたいだけど)。

認証関係は何か鬼門なのかなあ。他にもいろいろハマっている例を見かけた。うちのSebastienに聞いても「うちでは動いてるよ」って言われちゃったし。