私のアプリケーションでは、自分の付属のアドインと他のアドインを区別する必要があります。
それぞれ異なるキーで署名されているため、ホストアプリケーションもあります。アセンブリの身元を確認しますか?おそらくそれは強い名前であろうか?
私のアセンブリを他のアセンブリと区別する方法はありますか? (おそらく署名キーの助けを借りて)
私のアプリケーションでは、自分の付属のアドインと他のアドインを区別する必要があります。
それぞれ異なるキーで署名されているため、ホストアプリケーションもあります。アセンブリの身元を確認しますか?おそらくそれは強い名前であろうか?
私のアセンブリを他のアセンブリと区別する方法はありますか? (おそらく署名キーの助けを借りて)
あなたはどちらかGetPublicKey()
またはGetPublicKeyToken()
Assembly a =...
a.GetName().GetPublicKeyToken();
Assembly a =...
a.GetName().GetPublicKey();
使用することができますし、GUIDのリストを維持するよりも便利になり、あまりにも将来のアセンブリで動作します。
コンテナアセンブリに格納されている一覧に対して、読み込まれたアセンブリの公開キートークンを確認できます。
それとも、単にこのようなアセンブリの完全名を格納します。
var assembly = typeof (string).Assembly;
var myAssemblies = new HashSet<string>
{
"mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
};
Assert.IsTrue(myAssemblies.Contains(assembly.FullName));
また、あなたはGetPublicKeyTokenを使用して、トークンegainst確認することができますし、BitConverter
var assembly = typeof(string).Assembly;
var token = BitConverter.ToString(assembly.GetName().GetPublicKeyToken()).Replace("-","").ToLowerInvariant();
var expectedToken = "b77a5c561934e089";
Assert.AreEqual(expectedToken, token);
少し素敵なスニペット:
// Assembly is a System.Reflection.Assembly
public string GetAssemblyGUID(Assembly assembly)
{
object[] objects = assembly.GetCustomAttributes(typeof(System.Runtime.InteropServices.GuidAttribute), false);
if (objects.Length > 0)
return ((System.Runtime.InteropServices.GuidAttribute)objects[0]).Value;
else
return null;
}
これは、指定されたアセンブリのGUIDを取得します。プロジェクトプロパティで、アセンブリのGUIDを設定できます。これはクラスライブラリとPEに当てはまります。すべてのアセンブリが署名されている場合は
これは、厳密な名前の署名をチェックすることで実現できます。これについては、Checking For A Valid Strong Name Signatureを参照してください。この記事ではStrongNameSignatureVerificationExでP/invokeを使用していますが、.NET 4.0以上を使用している場合はICLRStrongName::StrongNameSignatureVerificationExを置き換える必要があります。
実際には公開鍵トークンについてはPublic Keys and Public Key Tokensを参照してください。公開鍵のハッシュであるため、信頼できないアセンブリに簡単に複製または抽出して注入することは、アセンブリを検証するための安全なメカニズムではありません。
この場合、あなたのアセンブリを他のアセンブリと区別する目的は何ですか?つまり、あなたのアプリケーションはあなたのアセンブリを他のアセンブリとは違ってどのように扱いますか? –
私のアプリは、私にライセンスされているライブラリのみを使用しているためです。アドインの開発者はライセンスを持っていませんし、そうであれば私に連絡するように依頼します。 – Vercas
アプリケーションにランタイムライセンスがある場合、なぜアドインをポリシングする必要がありますか?ライブラリの開発者が設計時のライセンス制限を適用する場合、設計時にはアドイン開発者に適用されますが、実行時に追加のチェックを行うべきではありません。 –