CAD日記

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

ソフト開発

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

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

以下記事の続編であり、完成形のソースコードを公開。
特定サーバーにアクセスするためのIDと一致するものだけを許容するプログラムをつくるには(1)

特定サーバーにアクセスするためのIDを取得するための実行部。
ドメイン参加の場合とワークグループ参加の両方を想定している。

using CredentialManagement;

public static string GetIdOfDomain(string domainName, string ServerName)
{
	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 objDomain = computer_system["Domain"];
		string dName = objDomain.ToString();
		if (dName.ToLower().IndexOf(domainName.ToLower()) != -1)  // ドメイン名を含んでいる
			id = System.Environment.UserName;  // ユーザーネームをIDとして返す
	}
	computer_system.Dispose();
	if (string.IsNullOrEmpty(id))
	{
		// ワークグループまたは別のドメインに参加しているので、資格情報のサーバー情報から確認する
		Credential cm = new Credential();
		cm.Target = ServerName;
		cm.Type = CredentialType.DomainPassword;
		if (cm.Exists())  // 指定したサーバー名の資格情報がある(パスワードを保存している)
		{
			cm.Load();
			id = cm.Username;
			int pos = id.LastIndexOf("\\");  // \の右側を取得
			if (pos != -1)
				id = id.Substring(pos + 1);
		}
		cm.Dispose();
	}
	return id;
}

上の実行部を呼び出している箇所

string id = GetIdOfDomain("参加しているドメイン名", "資格情報で管理しているサーバー名");
if (string.IsNullOrEmpty(id))  // idを認識できなかった
{
	// エラーだよ
}

ドメイン参加時のIDを取得するには以下の方法でもイケそうだったが、特定マシンでうまくいかなかったので採用せず。
ドメイン名を指定して判定するのがメンドウそうというのもあり。
id = System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName;

「特定サーバーにアクセスするためのIDと一致するものだけを許容する」というのは、ようするに簡易認証。
ドメイン認証やWindows資格認証を実際にやるのではなくて、ログインIDの規則性に着目したもの。
ログインIDに一致したものだけを許容するということであり、例えばログインIDに一致した画像イメージだけで捺印できることとして、自分の画像イメージでしか捺印できないようにする。
だって、いかになんちゃって捺印であったとしても、人の捺印がボンボンできてしまうようなシステムは敬遠されるからね。

-ソフト開発

執筆者:


comment

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

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

関連記事

no image

Breaker

以前、Layout Breakerという名前のソフトを作ろうと考えていました。レイアウトはともかく、ブレーカー、つまり破壊者です。周囲の反対により、取り下げましたが、個人的にはけっこう気に入っていて、 …

週報 2024/8/11~8/17:夏休みほぼ終了、ガバナンスの強化、VS2013サポート切れ

今週の火曜から金曜までの4日観の夏休みが終わった。今日からは普通の土日で明後日には出社と相成る。仕事に行きたくないモードというわけではなく、ただめんどくせーなというだけ。出社日が近づいていくことによる …

no image

iTextSharpによるPDFファイルのページ分割

iTextSharpはフリーのPDF関連コンポーネントであり、いろんなことができるのは知っていた。ドットNET、つまりC#かVB使いであれば、けっこう簡単にPDFを操ることができるのだが、あいにくおい …

no image

いたちごっこ2

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

no image

WinMergeのフィルタ

【2018/11/24追記】 この書きっぷりではあまりにもわかりずらいので、整理して追加情報を加えて新たな記事とした。 WinMegeのフィルタについて今すぐ知りたいならココを読め プログラマにとって …