Naar aanleiding van dit topic, ben ik gisteravond eens gaan spelen met strong naming icm StrongNameIdentityPermission.
Wat ik dus wou bereiken, is dat m'n assembly B enkel mocht 'gecalled' worden, door assemblies die m'n public key kennen.
Wat ik dus gedaan heb:
1) een private en een public key bekomen dmv de sn.exe tool.
2) m'n Assembly B gesigned met deze key, dmv het AssemblyKeyFile attribute te gebruiken in de AssemblyInfo.cs
3) Een class in m'n Assembly B het StrongNameIdentityPermission Attribute gegeven:
4) M'n assembly A heeft een reference naar assembly B, en assembly A heeft geen strong name (is dus niet gesigned).
Als ik in assembly A een object van MyClass (die in assembly B zit) wou instantieren, dan kreeg ik gisteren een Exception \o/ Woei, want dat was ook de bedoeling.
Als ik assembly A sign met dezelfde key als assembly B, dan werkt het wel. Wederom woei.
Echter, nu ik ditzelfde eens wou doen in een van m'n projectjes, dan wil het opeens niet meer lukken ?
Ik sign m'n classlibrary met diezelfde public key die ik gisteren had gegenereerd; ik geef een StrongNameIdentityPermission aan één van m'n classes in die assembly, en m'n applicatie die deze classlibrary gebruikt, sign ik niet.
Toch kan ik vanuit dat programma die class instantieren
Waarom krijg ik hier nu geen exception op ? Wat doe ik verkeerd ?
Wat ik ook niet helemaal snap is hetvolgende:
Volgens de MSDN zou het 'StrongNameIdentityPermission' attribute 2 argumenten moeten nemen, nl. een SecurityAction en de public key.
Echter, in werkelijkheid neemt hij slechts 1 argument, nl. de SecurityAction.
Hoe gaat die 'gecallede' assembly dan weten welke public key de 'aanroepende' assembly moet kennen om het gebruik van die class toe te laten ?
Gaat dit dan dmv de key waarmee de 'gecallede' assembly gesigned is ?
Wat ik dus wou bereiken, is dat m'n assembly B enkel mocht 'gecalled' worden, door assemblies die m'n public key kennen.
Wat ik dus gedaan heb:
1) een private en een public key bekomen dmv de sn.exe tool.
2) m'n Assembly B gesigned met deze key, dmv het AssemblyKeyFile attribute te gebruiken in de AssemblyInfo.cs
3) Een class in m'n Assembly B het StrongNameIdentityPermission Attribute gegeven:
code:
1
2
3
4
| [StrongNameIdentityPermission (SecurityAction.Demand)]
public class MyClass
{
} |
4) M'n assembly A heeft een reference naar assembly B, en assembly A heeft geen strong name (is dus niet gesigned).
Als ik in assembly A een object van MyClass (die in assembly B zit) wou instantieren, dan kreeg ik gisteren een Exception \o/ Woei, want dat was ook de bedoeling.
Als ik assembly A sign met dezelfde key als assembly B, dan werkt het wel. Wederom woei.
Echter, nu ik ditzelfde eens wou doen in een van m'n projectjes, dan wil het opeens niet meer lukken ?
Ik sign m'n classlibrary met diezelfde public key die ik gisteren had gegenereerd; ik geef een StrongNameIdentityPermission aan één van m'n classes in die assembly, en m'n applicatie die deze classlibrary gebruikt, sign ik niet.
Toch kan ik vanuit dat programma die class instantieren
Wat ik ook niet helemaal snap is hetvolgende:
Volgens de MSDN zou het 'StrongNameIdentityPermission' attribute 2 argumenten moeten nemen, nl. een SecurityAction en de public key.
Echter, in werkelijkheid neemt hij slechts 1 argument, nl. de SecurityAction.
Hoe gaat die 'gecallede' assembly dan weten welke public key de 'aanroepende' assembly moet kennen om het gebruik van die class toe te laten ?
Gaat dit dan dmv de key waarmee de 'gecallede' assembly gesigned is ?
[ Voor 5% gewijzigd door whoami op 20-03-2005 10:56 ]
https://fgheysels.github.io/
