Aufspüren des Attributs AllowPartiallyTrusted Callers (APTC)

Veröffentlicht: 14. Mrz 2003 | Aktualisiert: 23. Jun 2004

Von Mathias Schiffer

Im Zusammenhang mit dem neuen Sicherheitsmodell von .NET kommt dem Attribut AllowPartiallyTrustedCallers besondere Bedeutung zu: Sobald eine Assembly mit einem Strong Name versehen ist, prüft die CLR, ob die aufrufende Assembly voll vertrauenswürdig ist.

Anders ausgedrückt: Es wird geprüft, ob die aufrufende Assembly dem PermissionSet "Full Trust" angehört. Ist dies nicht der Fall, wird sie als nicht voll vertrauenswürdig eingestuft ("partially trusted") und der Aufruf blockiert. Sie erkennen diesen Umstand übrigens an einer Exception vom Typ System.Security.Exception mit der Fehlermeldung "Request failed".

Die nachfolgenden Codezeilen bilden die Basis für ein Utility, das die von Microsoft ausgelieferten Framework-Assemblies auf dieses Attribut hin überprüft und Ihnen so hilft, mögliche Stolpersteine frühzeitig zu erkennen.

' Vorausgesetzte Imports-Direktiven: 
Imports System 
Imports System.IO 
Imports System.Reflection 
Imports System.Collections 
Imports System.Web ' Referenz auf: System.Web.dll 
 ' ("Project" | "Add Reference")  
Function GetAPTC() As ArrayList 
  Dim found As ArrayList = New ArrayList() 
  Dim fi As FileInfo 
  Dim asm As [Assembly] 
  ' DLL-Dateien im CLR-Verzeichnis ermitteln 
  For Each fi In New DirectoryInfo( _  
 HttpRuntime.ClrInstallDirectory).GetFiles("*.dll") 
 Try 
   asm = [Assembly].LoadFrom(fi.FullName) 
   If asm.GetName().GetPublicKeyToken() Is Nothing Then 
  ' Dieser Sonderfall sollte eigentlich nie eintreten! 
  Console.WriteLine("Kein Public Key Token in Assembly " _ 
  & fi.Name & " gefunden!") 
  found.Add (fi.Name) 
   Else 
  If asm.IsDefined(Type.GetType( _ 
 "System.Security.AllowPartially" _ 
 & "TrustedCallersAttribute"), False) Then 
   found.Add (fi.Name) 
  End If 
   End If ' GetPublicKeyToken Is Nothing 
 Catch 
 End Try 
  Next 
  Return found 
End Function

Zur Nutzung dieses Codebeispiels iterieren Sie einfach über die von GetAPTC zurückgegebene ArrayList, beispielsweise zwecks Ausgabe:

Sub Main() 
  Dim s As String 
  Dim ar As ArrayList = GetAPTC() 
  For Each s In ar 
 Console.WriteLine (s) 
  Next 
End Sub

Weitere Informationen zu AllowPartiallyTrustedCallers
Weitere Informationen zu diesem Attribut finden sie in der MSDN Library unter
https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/aptcatypes.asp