Over Atos Origin
Contact
Diensten
Nieuws
Home
Feedback  |  Atos Origin.com  |  Syndicatie
Syndicatie
 
Links
Archief
Meer over de bloggers
Onderwerpen
Alle onderwerpen
Agile
Algemeen
Architectuur
Besturingssystemen
Bpm
Business intelligence
Business proces design
Cloud computing
Eai
Governance
Ibm
Integratie
It consultancy
Java
Microsoft
Nljug
Open source
Oracle
Process standaarden
Project management
Requirements engineering
Rich internet applications
Saas
Security
Sharepoint
Soa
Testing
Virtualisatie
Xml

Isolated Storage uit de isolatie
Geplaatst op 20 October 2009, 22:53 door Sander van de Velde in microsoft, architectuur, agile, sharepoint

Momenteel werk ik mee aan een project waarbij een Excel 2007 VSTO AddIn gecombineerd wordt met een Excel 2007 UDF (User Defined Functions) AddIn. Beiden worden bij het starten van Excel actief en samen beiden ze een krachtige OBA (Office Business Application) oplossing. 

Maar we liepen tegen een beperking op. Beiden AddIn's willen logica delen rond toegang tot een webservice waarvoor de gebruiker moet inloggen.  Helaas voor ons weten de addIns niks van elkaars bestaan terwijl het is voor de gebruiker wel zo praktisch om maar één keer in te loggen.

Dwangbuis 

 

De oplossing voor ons probleem was het gebruik van Isolated Storage (wat mij betreft staat deze term hoog in de top 10 van wazige .Net omschrijvingen, net iets achter ‘obfuscate'). Hierbij wordt de mogelijkheid geboden om specifieke data op te slaan en uit te lezen waarbij de toegang van de data bv. slechts beperkt wordt tot de gebruiker zelf. Dit kan ook gecombineerd worden tot het beperken van de toegang tot slechts enkele applicaties (lees assemblies).

Het gebruik van Isolated storage voor het delen van informatie tussen twee toepassingen begin met het bouwen van een library project voor gezamenlijk gebruik. Deze moet gesigned zijn. Creëer een class met daarin de logica om te lezen en te schrijven naar een Isolated Storage stream.

Classdiagram van de Isolated Storage helper 

Hier volgt een voorbeeld met twee console applicaties die samen informatie delen:

public class IsolatedStorager

{

    private static string _FileName = "IsolatedStorageDemo.dat";

 

    private static IsolatedStorageFile _IsolatedStorageFileStore =

                IsolatedStorageFile.GetStore(

                    IsolatedStorageScope.User | IsolatedStorageScope.Assembly

                    , null

                    , null);

 

    public static void WriteToStorage(string name, string password)

    {

        IsolatedStorageFileStream

            isolatedStorageFileStream =

                new IsolatedStorageFileStream(

                    _FileName

                    , FileMode.Create

                    , _IsolatedStorageFileStore);

                   

        StreamWriter writeStream = new StreamWriter(isolatedStorageFileStream);

       

        writeStream.WriteLine(name);

        writeStream.WriteLine(password);

       

        writeStream.Flush();

        writeStream.Close();

        isolatedStorageFileStream.Close();

 

        _IsolatedStorageFileStore.Close();

    }

 

    public static void ReadFromStorage(out string name, out string password)

    {

        IsolatedStorageFileStream

            securityDataFile =

                new IsolatedStorageFileStream(

                    _FileName

                    , FileMode.Open

                    , _IsolatedStorageFileStore);

 

        StreamReader readStream = new StreamReader(securityDataFile);

 

        name = readStream.ReadLine();

        password = readStream.ReadLine();

 

        readStream.Close();

        securityDataFile.Close();

 

        _IsolatedStorageFileStore.Close();

    }

 

    public static void Delete()

    {

        using (_IsolatedStorageFileStore)

        {

            if (_IsolatedStorageFileStore.GetFileNames(_FileName).Length > 0)

            {

                _IsolatedStorageFileStore.DeleteFile(_FileName);

            }

        }

    }

 

    public static bool Exists()

    {

        using (_IsolatedStorageFileStore)

        {

            return _IsolatedStorageFileStore.GetFileNames(_FileName).Length == 1;

        }

    }

}

 

Zoals je ziet is het nu mogelijk om heel basaal een naam en wachtwoord te lezen en te schrijven.

Schrijven gaat als volgt:

class Program

{

    static void Main(string[] args)

    {

        IsolatedStorager.WriteToStorage("DemoUser", "DemoPassword");

        Console.WriteLine("Text is written");

        Console.ReadKey();

    }

}

En teruglezen ziet er zo uit:

class Program

{

    static void Main(string[] args)

    {

        //IsolatedStorager.Delete();

 

        if (IsolatedStorager.Exists())

        {

            string name;

            string password;

 

            IsolatedStorager.ReadFromStorage(out name, out password);

            Console.WriteLine("User: " + name);

            Console.WriteLine("Password: " + password);

        }

        else

        {

            Console.WriteLine("No storage found");

        }

       

        Console.WriteLine("Ready...");

       

        Console.ReadKey();

    }

}

 

En zie daar, de twee console applicaties delen informatie. Maar waar blijft die informatie? Door simpel op IsolatedStorageDemo.dat te zoeken kom ik uit C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin. Daar staat het bestand en de inhoud is gewoon in ascii uit te lezen. Nu is dit op zich geen probleem, de inhoud is alleen voor deze gebruiker toegankelijk, maar informatie die zelfs niet voor de gebruiker leesbaar mag zijn moet nog verder beveiligd worden met encryptie.

Voor administrators (en gebruikers) is het mogelijk om meer informatie te verkrijgen over de opslag:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin>storeadm.exe /list

Microsoft (R) .NET Framework Store Admin 3.5.21022.8

Copyright (c) Microsoft Corporation.  All rights reserved.

 

Record #1

[Assembly]

<StrongName version="1"

Key="[knip]"

Name="IsClassLibrary"

Version="1.0.0.0"/>

 

        Size : 2048

 

Het is zelfs mogelijk om alle opslag weer te verwijderen of de opslag te beperken.  Ga er dus niet klakkeloos van uit dat een eenmaal aangemaakte Isolated Storage onbeperkt aanwezig zal zijn.

Voor meer informatie:

Introduction to Isolated Storage 

 

 

Performing Isolated Storage Tasks

 

 

Isolated Storage Tool (Storeadm.exe)




Share this | 499 keer bekeken | 0 reacties
Reacties Syndicatie en RSS
Reageer
 
 
Top artikelen
  • J-Spring 2009:Hop on board the Java Troubleshooting Platform
  • Softwaredocumentatie met Sandcastle
  • Agile Springboard
  • Blik op kwaliteit door middel van Six Sigma
  • Developers zijn kikkers
Recente reacties
  • IDC voorspelt dat SaaS mainstream wordt binnen paar ...
  • PrimeFaces is nauwelijks nog bekend terwijl het veel ...
  • Dank!
  • Het bijwerken is met behulp van if(contains()) remove() ...
  • Alleen keuren de bovengenoemde alternatieven duplicate entries af ...
  • Terms of use
  • Legal