Badając w praktyce możliwości Cardspace można odnieść wrażenie, że przynajmniej część implementacji w przykładach MS powinna wchodzić w zakres frameworka lub jego narzędzi. Nie za bardzo mogę zgodzić się z tezą, że technologia nie wymaga dużego wkładu programisty. Owszem zintegrowanie ze stroną HTML czy klientem WCF może nie musi być pracochłonne, ale już stworzenie pełnego systemu wymaga napisania wcale niemałej ilości kodu. Wydaje się, że przetwarzanie tokenu na stronie ASP.NET, generowanie kart zarządzanych (przykład MS to w zasadzie narzędzie z linii komend czytające parametry karty z plików konfiguracyjnych .ini), budowanie STS-a mogłoby zostać jeszcze bardziej uproszczone (przykład MS będący prostym STS-em wystarczy do eksperymentów, ale nie obejmuje wszystkich możliwości).
Konieczność konfigurowania m.in certyfikatów w magazynie, certyfikatów z SSL-em, praw odczytu klucza prywatnego, domen (w Windows Vista ponadto uprawnień do hostowania pod adresem o danej masce) powoduje, że uzyskiwanie tożsamości za pomocą karty może nie działać z różnych powodów. Do swoich przykładów MS porobił dość złożone skrypty konfiguracyjne, co trochę ratuje sprawę -:)
Korzystanie z kart zarządzanych wymaga również pewnego zakresu wiedzy i praktyki:
- karty wymagające karty osobistej: PPID nie jest zawsze ten sam, zależy od klucza publicznego bądź danych RP. Tak więc PPID należy odczytać na stronie legitymującej się takim certyfikatem jak wystawca tożsamości.
- karty wymagające certyfikatu X.509: certyfikat powinien być zainstalowany w gałęzi Current User/ Personal (jeśli nie wkładamy karty inteligentnej do czytnika)
- karty wymagające hasła - tu po prostu wpisujemy hasło
- karty wymagające Kerberosa - nic się nie podaje (MS w przykładowym STS-ie tego przypadku nie uwzględnia)
Do Cardspace nie ma zbyt wiele przykładów. Np. nie znalazłem przykładu MS z WCF i kartami zarządzanymi (wszyscy podają przykłady na WCF z kartami osobistymi i karty zarządzane ze stroną WWW). Próbowałem uzyskiwać token do serwisu WCF z przykładowego STS-a. Na
blogu Martin'a Parry jest parę wskazówek. Niestety poza plikiem konfiguracyjnym serwisu kod projektu nie został tam udostępniony. W rozwiązaniu problemu posunąłem się jednak krok do przodu: STS parsuje token RST i generuje token RSTR. Autor bloga daje cenną wskazówkę:
przykładowy STS akceptuje tylko klucze asymetryczne (w innym przypadku nie może sparsować przychodzącego tokenu, czego doświadczyłem na własnej skórze - ustaliłem to po zdebugowaniu STS-a). Jednak przy próbie wysłania przez STS tokenu do klienta, ten ostatni się wykrzacza. W logach klienta WCF można znaleźć info:
At least one security token in the message could not be validated. Po wielu próbach skonfigurowania klienta WCF (przynajmniej na razie) poddałem się -:(( Jakby ktoś jednak znalazł gdzieś w Internecie działający przykład lub wiedział jak to skonfigurować, to proszę o kontakt