Tag Archives: CardSpace

CryptographicException: Keyset does not exist

Korábban CardSpace használatakor futottam bele a fenti hibaüzenetbe, most egy IIS-ben hosztolt WCF szolgáltatás készítésekor jött elő. Elvesztettem volna a kulcsaimat? A problémát az okozza, hogy a web.config fájlban szerepel egy tanúsítvány hivatkozás a <serviceCertificate> ágban, de az IIS worker process felhasználói fiókjának, alapértelmezés szerint a Network Service fióknak, nincs joga hozzáférni a tanúsítványhoz. De hogy adok egy tanúsítványra olvasási jogot?

A CardSpace esetén bemutatott megoldás persze most is működik: letöltjük a Web Services Enhancements (WSE) 3.0-t és a WseCertificate3.exe segítségével Read jogot adunk a felhasználónak.

Ha nincs kéznél WSE, akkor használhatjuk a WCF példák között elérhető Find Private Key Toolt (letölthető innen is). Listázhatjuk vele az egyes tanúsítványtárakban lévő tanúsítványokat. Legegyszerűbben így:

FindPrivateKey.exe My LocalMachine

Erre megkapjuk ezt:

Select Certificate ablak

A tanúsítvány kiválasztása után kattintsunk az OK gombra és máris megtudjuk, hol lakik a tanúsítvány:

FindPrivateKey.exe eredmény

Nincs más dolgunk, mint elnavigálni a megadott C:ProgramDataMicrosoftCryptoRSAMachineKeys mappába és a megadott 0a38f98… nevű fájl tulajdonságlapján a Network Service felhasználónak Read jogot adni. Nem kell több, elég a Read!

Advertisements

Zermatt

Zermatt egy kisváros Svájc déli részén, mindössze tíz kilométerre az olasz határtól. A kb. 5500 fős település zsákfalu, 1620 méteres tengerszint feletti magasságban egy völgy végében, egy gleccser közelében fekszik. Érdekesség, hogy a tiszta levegő megóvása érdekében belső égésű motorokkal hajtott autók nem hajthatnak be a városba. Síparadicsom, csendes kisváros gyönyörű környezetben. Mi vezette a Microsoft fejlesztőit arra, hogy épp ezt a várost válasszák egy fejlesztői keretrendszer kódnevévé?

Talán mert mint minden határközeli svájci város, ez is a környező nemzetek, hagyományok olvasztótégelye. A “Zermatt” pedig egy új, Microsoft fejlesztésű developer identity framework kódneve.

A világban egyre inkább előtérbe kerül a hagyományos felhasználónév-jelszó pároson alapuló hitelesítési mechanizmusok leváltásának szükségessége. Az egyik lehetséges megoldás az ún. claims-based hitelesítés, amikor az alkalmazás tetszőleges információkat (claim) kérhet a felhasználótól és azok alapján határozza meg, hogy a felhasználónak mihez van joga és mihez nincs. (Na, ezt durván leegyszerűsítettem.) Ilyen hitelesítési mód például az MSDN Kompetencia Központ oldalán általunk is használt Windows CardSpace alapú bejelentkezés, amit egységesen ez az ikon jelez minden weblapon a világhálón:

CardSpace logo

Amikor ezt én annak idején megvalósítottam, gyakorlatilag semmilyen támogatás nem volt hozzá, minden vezérlőt, JavaScriptet egyedileg kellett megírnom. A tapasztalatokból itt cikksorozat is született (1, 2, 3, 4, 5), és nem én voltam egyedül a világon, aki nagyon várta, hogy a Microsoft keretrendszer szintű támogatást adjon a CardSpace alapú bejelentkezéshez ASP.NET alkalmazások esetére: vezérlőket és objektum modellt, ami végül egy standard IPrincipal objektumot ad eredményül anélkül, hogy mindenféle részlettel, például token összeállítással és titkosítással kellene közvetlenül foglalkoznunk.

Most mindez megtörtént, ez a keretrendszer a “Zermatt”, ráadásul nem csak ASP.NET alkalmazásokat támogat, hanem tetszőleges .NET-es alkalmazásban, például WCF környezetben is használható. Jelen pillanatban a keretrendszer nyilvános béta változata érhető el a Connect oldalon. További információkat Vittorio Bertocci blogbejegyzéséből tudhatunk meg, vagy aki a fejlesztői részletek iránt érdeklődik, annak Keith Brown whitepaperjét tudom ajánlani.