CAD日記

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

ソフト開発

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

投稿日:2020年11月8日 更新日:

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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

デュアルモニターでツールバーをドラッグすると枠非表示で残像が出る

デュアルモニター環境で、MFCで作ったアプリをメインモニター側に出して、アプリのツールーバー(CToolBar)をドラッグすると、枠がメインモニター側に表示されずに、サブモニター側に枠と残像が表示され …

PDFアレコレで捺印まわりのバグ修正

PDFアレコレをバージョンアップ。約3か月ぶり。 Ver3.02 2020/10/24 ・捺印などのPDF編集操作後にファイルを閉じて開いて、再編集すると以前編集していたPDFが復活していた。閉じると …

no image

KB2538242

また、VC2005再頒布可能パッケージの新しいものが出た。 昨日のWindowsUpdateでそれっぽいのが出てきたから、 もしやと思ったらビンゴだった。 Microsoft Visual C++ 2 …

no image

USBメモリを小容量に見せかける方法

USBメモリの大容量化が年々加速している。 おいらが最初に買ったのが10年くらい前で、128MBで1万円くらいだったか。 今では、4GBが500円で買える時代になっている。 個人で使うには容量が多いに …

no image

フォルダ監視

フォルダを常時監視しておいて、ファイルが放り込まれたら、 自動的にファイル変換してくれたらよいね。 なんていう話があった。 一週間という短い間に、対象ソフトは別で2件あった。 こいつぁ、なんとかせにゃ …