CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

特定サーバーにアクセスするためのIDと一致するものだけを許容するプログラムをつくるには?

投稿日:

Windowsで動作させるC#のプログラムの話で、特定サーバーにアクセスするためのIDと一致するものだけを許容するプログラムを作ろうとしていて、なかなか難航したのでその記録を残しておく。ようするに、IDとパスワードのうちのIDを取得したかったわけだけど、そのクライアントPCがドメイン参加なのかワークグループ参加なのかによってそのIDは変わってくるよねぇってことで、その分岐とWindows資格情報の取得というところが難問だったわけよ。

何はともあれ、そんなことをしているコード。

using CredentialManagement;

public static string GetIdOfDomain(string domainName)
{
	string id = "";
	ManagementObject computer_system = new ManagementObject(string.Format("Win32_ComputerSystem.Name='{0}'", Environment.MachineName));
	object objPartOfDomain = computer_system["PartOfDomain"];
	bool isDmn = (bool)objPartOfDomain;
	if(isDmn)
	{
		object objDomein = computer_system["Domain"];
		string dName = objDomein.ToString();
		if(string.Compare(domainName, dName, true) == 0)  // 指定したドメインに参加しているので、ユーザーネームをIDとして返す
			return System.Environment.UserName;
	}
	// ワークグループまたは別のドメインに参加しているので資格情報で確認する
	Credential cm = new Credential();
	cm.Target = domainName;
	cm.Type = CredentialType.DomainPassword;
	if (cm.Exists())
	{
		cm.Load();
		id = cm.Username;
	}
	return id;
}

指定した名前と一致するドメインに参加しているならユーザー名がIDになるし、そうでないなら資格情報から取得しましょってこと。まだ動作確認してないので、このまま動くとは思っていない。IDがドメイン名まで含んだ状態もあるだろうから、そんな考慮をすればよい。それから、例外処理やらnewしたクラスの後始末もちゃんとやらなければ。

なお、CredentialというクラスはCredentialManagementというパッケージで、Nugetから取得する必要がある。Windows資格情報へのアクセスは、Win32APIをアンマネージドで実現しなければいけないところを、マネージドにアクセスできるようにラップしたもの。C#で書くのにアンマネージドな処理を書くのはイヤなもんだから、こういうパッケージを作ってくれる人がいるというのはうれしいね。

-ソフト開発

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

C言語

遡ること10数年、初めて学んだコンピュータ言語がC言語でした。以来、ずっとやってます。机の上には本が一冊。 「実習C言語」(アスキー・ラーニングシステム) この本の画像を探してみましたが、古いだけにみ …

no image

いたちごっこ2

恐るべしクラッカー。万全と思われた対策も空しく、2回目のクラックが行われたところから話は始まります。 ●2度目のクラック 開発者は、某シリアル系クラックサイトで2度目の衝撃の遭遇しました。クラック結果 …

PDFへのなんちゃって捺印ではつまらんのでデジタル署名とタイムスタンプを付けてみることを検討中

PDFアレコレで捺印できるようにしたのはいいけど、しょせんはなんちゃって捺印。だって、好きな印影が作れてヒョっと捺印できちゃうわけで、なりすましができてしまうから。そんなこと言ったら、アナログな印鑑だ …

no image

プロパティシート

ソフト開発の話です。 私はVC6でソフトを作ってます。 ダイアログボックスの作りこみは、おもしろいものです。 プログラマーにとっては、デザイン的センスを問われる分野ですかね。 プロパティシートとは、ペ …

no image

VisualStudio2005

帰国後の1週間を乗り切った。 バカンスモードの体からビジネスモードに切り替えるのは、 なかなか厳しかったが、この1週間で徐々に慣れてきた。 夢のような南国リゾートとは違い、現実世界は厳しい。 さて、V …