Creare un'app di Windows Store per servizi bancari: simulazione di codice (app di Windows Store con JavaScript e HTML)

Questo esempio illustra come creare una semplice app di Windows Store per servizi bancari che implementa l'autenticazione sicura e la comunicazione tramite Internet. Puoi usare il codice di questo esempio per qualsiasi app di Windows Store che richiede l'interazione sicura con un server.

Le sezioni seguenti descrivono le parti dell'app di Windows Store per servizi bancari che abilitano l'autenticazione sicura.

Prerequisiti

Microsoft Visual Studio Express 2012 per Windows 8

Microsoft Visual Studio Professional 2012

Microsoft Visual Studio Ultimate 2012

Licenza per sviluppatori

Nota  Per eseguire l'app per servizi bancari, devi usare un servizio Web che fornisca gli endpoint per la comunicazione con il server. Negli argomenti seguenti vengono illustrate le implementazioni del controller System.Web.Mvc per l'autenticazione, la registrazione e il rinnovo di certificati.

Percorso di download

Scarica l'esempio di codice completo seguendo il percorso relativo all'app per servizi bancari di Windows Store con autenticazione avanzata.

Esecuzione dell'app

L'app di Windows Store per servizi bancari è modellata sulle attuali app per servizi bancari che forniscono l'autenticazione basata su certificati. Quando esegui l'app per la prima volta, devi accedere con un nome utente e una password, ottenendo in questo modo un accesso limitato al tuo account. Chiudi quindi l'app e avviala di nuovo, questa volta scegliendo di eseguire l'aggiornamento a un certificato. Infine chiudi l'app e riavviala un'altra volta. Quando fai clic su Sign in to your account, hai accesso completo al tuo account senza dover immettere le credenziali.

Autenticazione basata su password

Esegui prima i passaggi seguenti.

  • Avvia l'app per servizi bancari.
  • Fai clic su Sign in to your account.
  • Accedi immettendo il nome utente e la password, che possono essere costituiti da qualsiasi stringa non vuota, quindi fai clic su Submit.

    La pagina relativa agli account ti informa che hai accesso limitato a causa dell'autenticazione basata su password.

Aggiornamento all'autenticazione basata su certificati

Quando esegui l'aggiornamento dalle credenziali nome utente/password all'autenticazione basata su certificati, il tuo account diventa completamente accessibile.

  • Chiudi l'app e avviala di nuovo.
  • Fai clic su Upgrade to stronger authentication.
  • L'app chiede di eseguire l'aggiornamento e ne descrive i vantaggi.
  • Seleziona l'opzione Server-generated key (PFX install) e fai clic su Yes.

    L'app effettua la registrazione per un certificato e autentica l'utente.

Accesso all'account tramite autenticazione basata su certificati

Chiudi l'app. Quando la riavvii, non è più necessario eseguire l'accesso con il nome utente e la password.

  • Avvia di nuovo l'app e fai clic su Sign in to your account.

    Poiché il certificato per app è disponibile, viene usato per l'autenticazione. Ti verrà mostrata una finestra di dialogo per la conferma del certificato. Dopo aver completato l'autenticazione, la pagina relativa agli account ti comunica che hai l'accesso completo.

Obiettivo: archiviare le credenziali di accesso dell'utente in modo sicuro

Le credenziali nome utente e password vengono archiviate in modo sicuro nell'app di Windows Store tramite la classe PasswordVault.

Obiettivo: impostare il manifesto per un'app sicura

Per specificare le funzionalità e i certificati per la tua app di Windows Store, devi modificare il manifesto del pacchetto.

Obiettivo: accedere al server

L'app di Windows Store per servizi bancari mostra come gestire l'accesso di un utente per una sessione di servizi bancari online. Il server controlla il certificato dell'utente e l'app visualizza la pagina appropriata in base al risultato.

Obiettivo: richiedere una certificato

Puoi scegliere di richiedere un certificato con una chiave generata dal client o con una chiave generata dal server. L'app di Windows Store per servizi bancari mostra entrambe le modalità usando le funzioni createRequestAsync e importPfxDataAsync.

Obiettivo: rinnovare un certificato

Puoi rinnovare un certificato con la stessa facilità con cui puoi richiedere un nuovo certificato, con una chiave generata dal cliente o con una chiave generata dal server. L'app di Windows Store per servizi bancari mostra entrambe le modalità usando le funzioni createRequestAsync e importPfxDataAsync.

Impostazioni del pacchetto e manifesto dell'app

Per controllare la distribuzione di un'app di Windows Store, devi modificare un file manifesto denominato package.appxmanifest o AppxManifest.xml. Puoi usare Visual Studio 11 Express 2012 per Windows 8 per applicare impostazioni al file manifesto oppure puoi modificare direttamente il file.

In Esplora soluzioni, fai doppio clic su package.appxmanifest per aprire la finestra di progettazione del manifesto.

Impostazioni del pacchetto: proprietà dell'interfaccia utente dell'app

Nella pagina Interfaccia utente dell'applicazione sono impostate le proprietà seguenti.

ProprietàValore
Pagina inizialedefault.html
Mostra nomeTutti i logo
Nome breveTBA
Testo in primo pianoScuro
Colore di sfondo#000000
Notifiche schermata di blocco(non impostato)
Rotazione inizialeVerticale

 

Impostazioni del pacchetto: funzionalità dell'app

Nella pagina Funzionalità sono selezionate le funzionalità Internet (client) e Reti private (client e server). Per usare un certificato condiviso, assicurati che sia selezionata la funzionalità Certificati utente condivisi. Per altre informazioni, vedi Impostazione delle funzionalità dell'archivio certificati.

Nota  Per usare le smart card con l'app per servizi bancari, devi specificare la funzionalità sharedUserCertificates nel manifesto dell'app.

Nell'esempio seguente viene illustrato come dichiarare le funzionalità della tua app nel manifesto dell'app. Il codice è contenuto in package.appxmanifest.


<Capabilities>
   <Capability Name="privateNetworkClientServer" />
   <Capability Name="internetClient" />
<!--   <Capability Name="sharedUserCertificates"/>-->
 </Capabilities>

Impostazioni del pacchetto: dichiarazioni di certificati

Per assegnare un certificato radice attendibile e altri certificati digitali, devi usare le dichiarazioni di certificati. La procedura seguente descrive come usare la finestra di progettazione delle dichiarazioni per aggiungere un nuovo certificato radice. Per altre informazioni, vedi l'argomento relativo all'installazione di certificati con il manifesto.

Se l'elemento Certificati non è elencato in Dichiarazioni supportate, usa i passaggi seguenti per aggiungere un certificato radice.

  • Apri la pagina Dichiarazioni.
  • Nell'elenco a discesa Dichiarazioni disponibili seleziona Certificati e fai clic su Aggiungi.

    Verrà aperta la finestra di progettazione dei certificati.

  • In Flag attendibili assicurati che sia selezionata la funzionalità Attendibilità esclusiva.
  • In Criteri di selezione assicurati che sia selezionata la funzionalità Selezione automatica.
  • In Certificati fai clic su Aggiungi nuovo.
  • Nella casella di testo Nome archivio digita Root.
  • Nella casella di testo Contenuto digita myroot.cer.

L'esempio seguente mostra come assegnare i certificati radice e dello sviluppatore. Il codice è contenuto in package.appxmanifest.


<Extensions>
   <Extension Category="windows.certificates">
     <Certificates>
       <Certificate StoreName="Root" Content="myroot.cer" />
       <Certificate StoreName="CA" Content="mystandca.cer" />
       <TrustFlags ExclusiveTrust="true" />
       <SelectionCriteria AutoSelect="true" />
     </Certificates>
   </Extension>
 </Extensions>

Impostazioni del pacchetto: proprietà del pacchetto

Nella pagina Pacchetto imposta Nome pacchetto su Microsoft.SDKSamples.TailoredBankAppShare e Nome visualizzato pacchetto su TailoredBankAppShare SDK Sample.

Accesso al server con nome utente e password

Usa la classe PasswordVault per archiviare e recuperare le credenziali password per un'applicazione sicura. Per una maggiore sicurezza, l'app per servizi bancari invita gli utenti a eseguire l'aggiornamento all'autenticazione basata su certificati.

L'esempio seguente mostra come implementare l'accesso a un'app sicura con le credenziali nome utente e password. Il codice è contenuto in scenario0.js.


//account logon
// onClick() handler for the 'submitButton'
function logon() {
    try {
        var username = document.getElementById("username").value;
        var password = document.getElementById("password").value;

        //store user credential in the vault component
        if (username && password) {
            var cred = new Windows.Security.Credentials.PasswordCredential("WoodGrove-Bank-usercred", username, password);
            var vault = new Windows.Security.Credentials.PasswordVault();
            vault.add(cred);
        }else {
            return false;
        }
    }
    catch (err) {
        var message = '';
        for (var f in err) {
            message += f;
            message += ':';
            message += err[f];
            message += ' ';
        }
        goError(message);
        return false;
    }

    var params = "UserName=" + username;
    params += "&Password=" + password;

    WinJS.xhr({
        type: "POST",
        url: "Your URL",    //Please provide the server url here. For example:
                            //url: "https://WoodGrove-Bank/bankserver2/account/simplelogon",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: params
    }).then(
        function (request) {
            var obtainedData = window.JSON.parse(request.responseText);
            var /*@override*/ item = {
                title: "Account Page",
                content: "<strong>(Please upgrade to strong authentication if you need full access to your account.)",
                backgroundColor: 'rgba(25,50,200,1)',
                navigate: "groupeditemsPage"
            };
            WinJS.Navigation.navigate('/html/account.html', { item: item });
        },
        function (request) {
            goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                    + "The server URL you are using may not be valid. <br>"
                    + "Please contact your bank server service, "
                    + "or refer to the bank server walk through document for instructions to setup your own server.");
            return false;
        }
    );
};

Il nome utente e la password vengono aggiunti alla classe PasswordVault e inviati all'endpoint simplelogon del servizio Web tramite la funzione xhr. Se la richiesta ha esito positivo, viene visualizzata la pagina account.html.

Richiesta e registrazione di un certificato

Per una maggiore sicurezza, l'app per servizi bancari invita gli utenti a eseguire l'aggiornamento all'autenticazione basata su certificati. Puoi creare una richiesta di certificato nell'app client o importare un certificato PFX (Personal Information Exchange) dal server. In entrambi i casi, per la registrazione devi usare l'oggetto CertificateEnrollmentManager.

Invio di una richiesta di certificato a un server

L'app di Windows Store può inviare una richiesta di certificato a un'autorità di certificazione che esegue Servizi certificati Microsoft, quindi puoi usare CertificateEnrollmentManager per installare il certificato emesso. Per altre informazioni, vedi Invio di una richiesta di certificato e installazione della risposta.

L'esempio seguente mostra come richiedere un certificato con una chiave generata dal client. Il codice è contenuto in enrollment.js.


//pkcs10 certification enrollment
function createRequestBlobAndEnroll(user)
{
    var encoded;
    try {
        //WinRT APIs for creating a certficate request
        var request = new Windows.Security.Cryptography.Certificates.CertificateRequestProperties;
        request.subject = user;
        request.friendlyName = user + "'s WoodGrove Bank Certificate";
        request.keyProtectionLevel = Windows.Security.Cryptography.Certificates.KeyProtectionLevel.noConsent;
        Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager.createRequestAsync(request).then(
            function (requestResult) {
                encoded = requestResult;
	               var installOption = 0; //Windows.Security.Cryptography.Certificates.InstallOptions.none;
                var params = "username=" + user;
                params += "&request=" + encodeURIComponent(encoded);
		    
                WinJS.xhr({
                    type: "POST",
                    url: "Your URL",    //Please provide the server url here. For example:
                                        //url: "https://WoodGrove-Bank/bankserver2/enrollment/submit",
                    headers: { "Content-type": "application/x-www-form-urlencoded" },
                    data: params
                }).then(
                    function (/*@override*/request) {
                        var obtainedData = window.JSON.parse(request.responseText);
                        try {
                            // WinRT API for certficate enrollment
                            Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager
                                .installCertificateAsync(obtainedData.certificate, installOption ).then(
                            function() {
                                // set certificate enrollment mark to aviod redundant certificate enrollments
                                Windows.Storage.ApplicationData.current.localSettings.values["EnrollCertificate"] = true;

                                var /*@override*/ item = {
                                        title: "Account Page",
                                        content: 
"<strong>(Please sign out and re-launch the application so as to use your enrolled certificate.)<strong>",
                                        backgroundColor: 'rgba(191, 84, 46, 1)',
                                        navigate: "sign-out"
                                };
                                WinJS.Navigation.navigate('/html/account.html', { item: item });
                                return false;
                            },
                            function(installError) {
                                gotoError("(The error was: <strong>" + intallError.message + "</strong>)");
                                return false;
                            });
                        } catch (err) {
                            var /*@override*/ message = '';
                            for (var /*@override*/ f in err) {
                            message += f;
                            message += ':';
                            message += err[f];
                            message += ' ';
                        }
                            goError(message);
                            return false;
                        }
                    },
                    function (/*@override*/request) {
                        goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                        + "The server URL you are using may not be valid. <br>"
                        + "Please contact your bank server service, "
                        + "or refer to the bank server topic for instructions to setup your own server.");
                        return false;
                    });
            },
            function (requestError) {
                gotoError("(The error was: <strong>" + requestError.message + "</strong>)");
                return false;
            });
    }
    catch (err) {
        var message = '';
        for (var f in err) {
            message += f;
            message += ':';
            message += err[f];
            message += ' ';
        }
        goError(message);
        return false;
    };
}

La funzione createRequestBlobAndEnroll usa l'oggetto CertificateEnrollmentManager per generare una richiesta di certificato e inviarla al server. Se la richiesta ha esito positivo, la funzione installCertificateAsync installa il certificato fornito.

Rinnovo con una chiave generata dal client

Il rinnovo di un certificato segue fondamentalmente la stessa procedura della relativa installazione iniziale, poiché Windows 8 esclude dal filtro il certificato precedente.

L'esempio seguente mostra come richiedere un certificato con una chiave generata dal client. Il codice è contenuto in groupedItemsPage.js.



//pkcs10 certificate renewal
function createRequestBlobAndEnroll(user) {
    var encoded;
    try {
        //WinRT APIs for creating a certficate request
        var request = new Windows.Security.Cryptography.Certificates.CertificateRequestProperties;
        request.subject = user;
        request.friendlyName = user + "'s WoodGrove Bank Certificate";
        request.keyProtectionLevel = Windows.Security.Cryptography.Certificates.KeyProtectionLevel.noConsent;
        Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager.createRequestAsync(request).then(
            function (requestResult) {
                encoded = requestResult;
                // No username or password required in this case - we already have a
                // client-authenticated SSL connection
                var installOption = 0; //Windows.Security.Cryptography.Certificates.InstallOptions.none;
                var params = "request=" + encodeURIComponent(encoded);
                WinJS.xhr({
                    type: "POST",
                    url: "Your URL",    //Please provide the server url here. For example:
                                        //url: "https://WoodGrove-Bank/bankserver2/renewal/renewP10",
                    headers: { "Content-type": "application/x-www-form-urlencoded" },
                    data: params
                }).then(
                    function (/*@override*/request) {
                        var obtainedData = window.JSON.parse(request.responseText);
                        // We do not need to remove the previous certificate first -
                        // Win8 filtering will take care of it.
                        try {
                            Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager
                                .installCertificateAsync(obtainedData.certificate, installOption).then(
                            function () {
                                var /*@override*/ item = {
                                    title: "Account Page",
                                    content: "",
                                    backgroundColor: 'rgba(25,50,200,1)',
                                    navigate: "sign-out"
                                };
                                WinJS.Navigation.navigate('/html/account.html', { item: item });
                            },
                            function (installError) {
                                gotoError("(The error was: <strong>" + intallError.message + "</strong>)");
                                return false;
                            });
                        } catch (err) {
                            var /*@override*/ message = '';
                            for (var /*@override*/ f in err) {
                                message += f;
                                message += ':';
                                message += err[f];
                                message += ' ';
                            };
                            goError(message);
                            return false;
                        };
                    },
                    function (/*@override*/request) {
                        goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                        + "The server URL you are using may not be valid. <br>"
                        + "Please contact your bank server service, "
                        + "or refer to the bank server walk through document for instructions to setup your own server.");
                        return false;
                    });
            },
            function (requestError) {
                gotoError("(The error was: <strong>" + requestError.message + "</strong>)");
                return false;
            });
    }
    catch (err) {
        var message = '';
        for (var f in err) {
            message += f;
            message += ':';
            message += err[f];
            message += ' ';
        }
        goError(message);
        return false;
    };
}

La funzione createRequestBlobAndEnroll usa l'oggetto CertificateEnrollmentManager per generare una richiesta di certificato e inviarla al server. Se la richiesta ha esito positivo, la funzione installCertificateAsync installa il certificato fornito. Non è necessario rimuovere il certificato precedente poiché Windows 8 lo esclude dal filtro.

Verifica di un certificato

Puoi determinare lo stato di un certificato e visualizzare pagine diverse in base al risultato.

L'esempio seguente mostra come verificare un certificato e visualizzare pagine diverse in base al risultato. Il codice è contenuto in groupedItemsPage.js.



//check certification
function checkCert(senario, scenarioitem) {
    var params = "";
    WinJS.xhr({
        type: "POST",
        url: "Your URL",    //Please provide the server url here. For example:
                            //url: "https://WoodGrove-Bank/bankserver2/renewal/CheckCert",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: params
    }).then(
        function (request) {
            var obtainedData = window.JSON.parse(request.responseText);
            if (obtainedData.hasCert === true) {
                if (obtainedData.renew === true) {
                    if (obtainedData.pfx === true) {
                        doPFXRenewal(obtainedData.user);
                    }
                    else {
                        doPKCS10Renewal(obtainedData.user);
                    }
                }
                else {
                    var /*@override*/ item = {
                        title: "Account Page",
                        content: "",
                        backgroundColor: 'rgba(25,50,200,1)',
                        navigate: "sign-out"
                    };
                    WinJS.Navigation.navigate('/html/account.html', { item: item });
                }
            }
            else {
                switch (senario) {
                    case 0:
                        if (checkCredential()) {
                            var item2 = {
                                title: "Account Page",
                                content: 
"<strong>(Please upgrade to strong authentication if you need full access to your account. <br>"
+ "If you already upgraded to use strong authentication, please sign out and launch the app again and sign-in.)</strong>",
                                backgroundColor: 'rgba(191, 84, 46, 1)',
                                navigate: "groupeditemsPage"
                            };
                            WinJS.Navigation.navigate('/html/account.html', { item: item2 });
                        } else {
                            WinJS.Navigation.navigate('/html/scenario0.html', { item: scenarioitem });
                        }
                        break;
                    case 1:
                        if (checkCredential() && !checkEnrollment()) {
                            WinJS.Navigation.navigate('/html/enrollment.html', { item: scenarioitem });
                        }
                        else if (!checkEnrollment()) {
                            WinJS.Navigation.navigate('/html/scenario1.html', { item: scenarioitem });
                        }
                        else {
                            var item3 = {
                                title: "Account Page",
                                content: 
"<strong>(You already upgraded to use strong authentication. Please sign out and launch the app again and sign-in.)</strong>",
                                backgroundColor: 'rgba(191, 84, 46, 1)',
                                navigate: "sign-out"
                            };
                            WinJS.Navigation.navigate('/html/account.html', { item: item3 });
                        }
                        break;
                    default:
                        goError("unknown scenario!!!");
                        break;
                }
            }
            return false;
        },
        function (request) {
            goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                    + "The server URL you are using may not be valid. <br>"
                    + "Please contact your bank server service, "
                    + "or refer to the bank server walk through document for instructions to setup your own server.");
            return false;
        }
    );
}

La funzione checkCert esegue una query sull'endpoint CheckCert del servizio Web e analizza la risposta. Se la risposta è un certificato, l'app verifica se è necessario un rinnovo e, in caso affermativo, chiama la funzione di rinnovo appropriata. In caso negativo, viene visualizzata la pagina dell'account autenticato in modo avanzato.

Aggiornamento all'autenticazione basata su certificati

Per una maggiore sicurezza, l'app per servizi bancari invita gli utenti a eseguire l'aggiornamento all'autenticazione basata su certificati. Puoi creare una richiesta di certificato nell'app client o importare un certificato PFX (Personal Information Exchange) dal server. In entrambi i casi, per la registrazione devi usare l'oggetto CertificateEnrollmentManager.

Importazione di un certificato PFX da un server

L'esempio seguente mostra come importare un certificato PFX da un server. Il codice è contenuto in enrollment.js.


// pfx certificate enrollment
function doPFXEnrollment(user) {

    var exportable = Windows.Security.Cryptography.Certificates.ExportOption.exportable;
    var consent = Windows.Security.Cryptography.Certificates.KeyProtectionLevel.noConsent;
    var installOption = 0; //Windows.Security.Cryptography.Certificates.InstallOptions.none;
    var params = "username=" + user;

    WinJS.xhr({
        type: "POST",
        url: "Your URL",    //Please provide the server url here. For example:
                            //url: "https://WoodGrove-Bank/bankserver2/enrollment/getPFX",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: params
    }).then(
        function (request) {
            var obtainedData = window.JSON.parse(request.responseText);
            try {
                // import pfx certificate file into the app container
                Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager
                    .importPfxDataAsync(obtainedData.pfx, obtainedData.password, exportable, consent, 
                        installOption, obtainedData.friendlyName).then(
                    function () {
                // set certificate enrollment mark to aviod redundant certificate enrollments
                Windows.Storage.ApplicationData.current.localSettings.values["EnrollCertificate"] = true;
                var /*@override*/ item = {
                    title: "Account Page",
                    content: 
"<strong>(Please sign out and re-launch the application so as to use your enrolled certificate.)</strong>",
                    backgroundColor: 'rgba(191, 84, 46, 1)',
                    navigate: "sign-out"
                };
                WinJS.Navigation.navigate('/html/account.html', { item: item });
                return;
                    },
                    function(importError) {
                        gotoError("(The error was: <strong>" + requestError.message + "</strong>)");
                        return false;
                    }); 
            } catch (err) {
                var message = '';
                for (var f in err) {
                    message += f;
                    message += ':';
                    message += err[f];
                    message += ' ';
                }
                goError(message);
                return false;
            }
        },
        function (request) {
            goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                    + "The server URL you are using may not be valid. <br>"
                    + "Please contact your bank server service, "
                    + "or refer to the bank server walk through document for instructions to setup your own server.");
            return false;
        }
    );
}

La funzione doPFXEnrollment cerca di effettuare la connessione all'endpoint getPFX del servizio Web. Se l'esito è positivo, l'oggetto CertificateEnrollmentManager importa il certificato fornito e lo installa nel computer client.

Rinnovo di un certificato PFX

Il rinnovo di un certificato PFX (Personal Information Exchange) segue fondamentalmente la stessa procedura della relativa installazione iniziale, poiché Windows 8 esclude dal filtro il certificato precedente.

L'esempio seguente mostra come rinnovare un certificato PFX. Il codice è contenuto in groupedItemsPage.js.


//pfx certificate renewal
function doPFXRenewal(user) {
    var exportable = Windows.Security.Cryptography.Certificates.ExportOption.exportable;
    var consent = Windows.Security.Cryptography.Certificates.KeyProtectionLevel.noConsent;
    var installOption = 0; //Windows.Security.Cryptography.Certificates.InstallOptions.none;
    var params = "username=" + user;
    WinJS.xhr({
        type: "POST",
        url: "Your URL",    //Please provide the server url here. For example:
                            //url: "https://WoodGrove-Bank/bankserver2/enrollment/getPFX",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: params
    }).then(
        function (request) {
            var obtainedData = window.JSON.parse(request.responseText);
            // We do not need to remove the previous certificate first -
            // Win8 filtering will take care of it.
            try {
                // No need to remove old cert, Windows will filter.
                Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager
                    .importPfxDataAsync(obtainedData.pfx, obtainedData.password, exportable, consent, 
                        installOption, obtainedData.friendlyName).then(
                    function () {
                        var /*@override*/ item = {
                            title: "Account Page",
                            content: "",
                            backgroundColor: 'rgba(25,50,200,1)',
                            navigate: "sign-out"
                        };
                        WinJS.Navigation.navigate('/html/account.html', { item: item });
                    },
                    function (importError) {
                        gotoError("(The error was: <strong>" + importError.message + "</strong>)");
                        return false;
                    });
            } catch (err) {
                var message = '';
                for (var f in err) {
                    message += f;
                    message += ':';
                    message += err[f];
                    message += ' ';
                };
                goError(message);
                return false;
            }

        },
        function (request) {
            goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                    + "The server URL you are using may not be valid. <br>"
                    + "Please contact your bank server service, "
                    + "or refer to the bank server walk through document for instructions to setup your own server.");
            return false;
        }
    );
}

La funzione doPFXRenewal invia una richiesta al server per un certificato PFX. Se l'esito è positivo, la funzione importPfxDataAsync importa il certificato fornito e lo installa nel computer client. Non è necessario rimuovere il certificato precedente poiché Windows 8 lo esclude dal filtro.

Argomenti correlati

CertificateEnrollmentManager
PasswordVault
Uso dei certificati
Creazione di un'app di Windows Store per servizi bancari
Creare un'app di Windows Store per servizi bancari: risorse

 

 

Mostra:
© 2015 Microsoft