Aplicación de la Tienda Windows para banca: tutorial de código (aplicaciones de la Tienda Windows con JavaScript y HTML)

Este ejemplo muestra cómo crear una sencilla aplicación de la Tienda Windows para banca que implemente comunicación y autenticación seguras a través de Internet. Puedes usar el código que figura en este ejemplo para cualquier aplicación de la Tienda Windows que requiera una interacción segura con un servidor.

Las siguientes secciones describen las partes de la aplicación de la Tienda Windows para banca que permiten la autenticación segura.

Requisitos previos

Microsoft Visual Studio Express 2012 for Windows 8

Microsoft Visual Studio Professional 2012

Microsoft Visual Studio Ultimate 2012

Licencia de desarrollador

Nota  Para ejecutar la aplicación de banca, necesitas un servicio web que proporcione extremos para la comunicación con el servidor. En los siguientes temas se muestran las implementaciones del controlador System.Web.Mvc para autenticación, inscripción de certificados y renovación de certificados.

Ubicaciones de descarga

Descarga el ejemplo de código completo de la siguiente ubicación: Aplicación de la Tienda Windows de banca con autenticación segura.

Ejecución de la aplicación

La aplicación de la Tienda Windows para banca toma como modelo las aplicaciones web para banca existentes que proporcionan autenticación basada en certificados. Ejecuta la aplicación por primera vez e inicia sesión con un nombre de usuario y contraseña, lo que te proporciona un acceso limitado a tu cuenta. Después cierra la aplicación y vuelve a iniciarla, pero esta vez opta por actualizar a un certificado. Finalmente, cierra la aplicación y vuelve a iniciarla. Cuando hagas clic en Sign in to your account (Iniciar sesión en tu cuenta), tendrás acceso total a la cuenta sin necesidad de escribir credenciales.

Autenticación basada en contraseña

Primero, realiza los siguientes pasos.

  • Inicia la aplicación de banca.
  • Haz clic en Sign in to your account (iniciar sesión en tu cuenta).
  • Inicia sesión con el nombre de usuario y la contraseña, que pueden ser cadenas no vacías, y haz clic en Submit (Enviar).

    La página de cuentas indica que tienes acceso limitado debido a la autenticación basada en contraseña.

Actualización a autenticación basada en certificados

Tu cuenta obtiene acceso total cuando actualizas de credenciales de nombre de usuario y contraseña a autenticación basada en certificados.

  • Cierra la aplicación y vuelve a iniciarla.
  • Haz clic en Upgrade to stronger authentication (actualizar a una autenticación más segura).
  • La aplicación te solicitará que actualices y te explicará los beneficios de la actualización.
  • Activa Server-generated key (PFX install) (Clave generada por el servidor [instalación PFX]) y haz clic en Yes (Sí).

    La aplicación se inscribirá en un certificado y autenticará al usuario.

Acceder a la cuenta mediante autenticación basada en certificados

Cierra la aplicación. Cuando la vuelves a iniciar, no necesitas iniciar sesión con tu nombre de usuario y contraseña.

  • Vuelve a iniciar la aplicación y haz clic en Sign in to your account (Iniciar sesión en tu cuenta).

    Como el certificado por aplicación está disponible, se usa para la autenticación. Aparecerá un cuadro de diálogo en el que deberás confirmar el certificado. Después de la autenticación, la página de cuenta indicará que tienes acceso total.

Objetivo: almacenar las credenciales de inicio de sesión del usuario de manera segura

Puedes almacenar las credenciales de contraseña y nombres de usuario en la aplicación de la Tienda Windows mediante PasswordVault.

Objetivo: establecer el manifiesto para una aplicación segura

Las funcionalidades y los certificados de tu aplicación de la Tienda Windows se especifican editando el manifiesto del paquete.

Objetivo: iniciar sesión en el servidor

La aplicación de la Tienda Windows para banca muestra cómo administrar un usuario que inicia sesión para una sesión de banca en línea. El servidor comprueba el certificado del usuario y la aplicación muestra la página correspondiente en función del resultado.

Objetivo: solicitar un certificado

Puedes optar por solicitar un certificado con una clave generada por el cliente o con una clave generada por el servidor. La aplicación de la Tienda Windows para banca muestra ambos procedimientos mediante las funciones createRequestAsync y importPfxDataAsync.

Objetivo: renovar un certificado

Renovar un certificado es tan fácil como solicitar un nuevo certificado, ya sea con una clave generada por el cliente o con una clave generada por el servidor. La aplicación de la Tienda Windows para banca muestra ambos procedimientos mediante las funciones createRequestAsync y importPfxDataAsync.

Configuración del paquete y manifiesto de aplicación

Edita un archivo de manifiesto de la aplicación llamado package.appxmanifest o AppxManifest.xml para administrar la implementación de una aplicación de la Tienda Windows. Puedes usar Visual Studio Express 2012 para Windows 8 para aplicar la configuración al archivo de manifiesto o puedes editar el archivo directamente.

En el Explorador de soluciones, haz doble clic en package.appxmanifest para abrir el diseñador de manifiestos.

Configuración del paquete: propiedades de interfaz de usuario de la aplicación

En la página UI de la aplicación, las siguientes propiedades se establecen como se muestra.

PropiedadValor
Página de iniciodefault.html
Mostrar nombreTodos los logotipos
Nombre cortoTBA
Texto en primer planoOscuro
Color de fondo#000000
Notificaciones de pantallas de bloqueo(no establecido)
Rotación inicialVertical

 

Configuración de paquete: funcionalidades de la aplicación

En la página Funcionalidades, se activan Internet (cliente) y Redes privadas (cliente y servidor). Para usar un certificado compartido, asegúrate de que esté activada la opción Certificados de usuario compartidos. Para obtener más información, consulta Configuración de las funcionalidades del almacén de certificados.

Nota  Para usar tarjetas inteligentes con la aplicación de banca, debes especificar la funcionalidad sharedUserCertificates en el manifiesto de la aplicación.

El siguiente ejemplo muestra cómo declarar las funcionalidades de la aplicación en el manifiesto de la aplicación. El código está en package.appxmanifest.


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

Configuración del paquete: declaraciones de certificados

Usa declaraciones de certificados para asignar un certificado raíz de confianza y otros certificados digitales. El siguiente procedimiento describe cómo usar el diseñador de declaraciones para agregar un nuevo certificado raíz. Para obtener más información, consulta Instalación de certificados mediante el manifiesto.

Si Certificados no figura en Declaraciones admitidas, sigue los pasos que figura a continuación para agregar un certificado raíz.

  • Abre la página Declaraciones.
  • En la lista desplegable Declaraciones disponibles, selecciona Certificados y haz clic en Agregar.

    Se abrirá el diseñador de certificados.

  • En TrustFlags, asegúrate de que esté activada la opción ExclusiveTrust.
  • En Criterio de selección, asegúrate de que esté activada Selección automática.
  • En Certificados, haz clic en Agregar nuevo.
  • En el cuadro de texto StoreName, escribe Raíz.
  • En el cuadro de texto Contenido, escribe myroot.cer.

El siguiente ejemplo muestra cómo asignar los certificados raíz y de desarrollador. El código está en 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>

Configuración del paquete: propiedades del paquete

En la página Paquete, establece Nombre del paquete en Microsoft.SDKSamples.TailoredBankAppShare y Nombre para mostrar del paquete en Ejemplo de SDK de TailoredBankAppShare.

Inicio de sesión en el servidor con nombre de usuario y contraseña

Usa PasswordVault para almacenar y recuperar credenciales de contraseña de una aplicación segura. Para obtener una seguridad mayor, la aplicación de banca recomienda la actualización a una autenticación basada en certificados.

El siguiente ejemplo muestra cómo implementar el inicio de sesión en una aplicación segura con credenciales de nombre de usuario y contraseña. El código está en 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;
        }
    );
};

El nombre de usuario y la contraseña se agregan a PasswordVault y se envían al extremo simplelogon del servidor web mediante la función xhr. Si la solicitud se procesa correctamente, se muestra account.html.

Solicitud de un certificado e inscripción

Para obtener una seguridad mayor, la aplicación de banca recomienda la actualización a una autenticación basada en certificados. Puedes crear una solicitud de certificado en la aplicación cliente o puedes importar un certificado de intercambio de información personal (PFX) del servidor. En ambos casos, te inscribes mediante el objeto CertificateEnrollmentManager.

Envío de una solicitud de certificado a un servidor

La aplicación de la Tienda Windows puede enviar una solicitud de certificado a una autoridad de certificación que ejecute servicios de certificados de Microsoft. Además, puedes usar CertificateEnrollmentManager para instalar el certificado emitido. Para obtener más información, consulta Envío de una solicitud de certificado e instalación de la respuesta para el certificado.

El siguiente ejemplo muestra cómo solicitar un certificado con una clave generada por el cliente. El código está en 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 función createRequestBlobAndEnroll usa el objeto CertificateEnrollmentManager para generar una solicitud de certificado y enviarla al servidor. Si la solicitud se procesa correctamente, la función installCertificateAsync instala el certificado proporcionado.

Renovación con una clave generada por el cliente

El proceso de renovación de un certificado es básicamente igual que el proceso de instalación inicial, ya que Windows 8 filtra el antiguo certificado.

El siguiente ejemplo muestra cómo solicitar un certificado con una clave generada por el cliente. El código está en 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 función createRequestBlobAndEnroll usa el objeto CertificateEnrollmentManager para generar una solicitud de certificado y enviarla al servidor. Si la solicitud se procesa correctamente, la función installCertificateAsync instala el certificado proporcionado. No es necesario quitar el antiguo certificado porque Windows 8 lo filtra.

Comprobación de un certificado

Puedes consultar el estado de un certificado y mostrar diferentes páginas según el resultado,

El siguiente ejemplo muestra cómo comprobar un certificado y mostrar diferentes páginas según el resultado. El código está en 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 función checkCert consulta el extremo CheckCert del servicio web y analiza la respuesta. Si la respuesta es un certificado, la aplicación comprueba si es necesario renovarlo y, de ser así, llama a la función de renovación adecuada. De lo contrario, se muestra la página de cuenta con autenticación segura.

Actualización a autenticación basada en certificados

Para obtener una seguridad mayor, la aplicación de banca recomienda la actualización a una autenticación basada en certificados. Puedes crear una solicitud de certificado en la aplicación cliente o puedes importar un certificado de intercambio de información personal (PFX) del servidor. En ambos casos, te inscribes mediante el objeto CertificateEnrollmentManager.

Importación de un certificado PFX de un servidor

El siguiente ejemplo muestra cómo importar un certificado PFX de un servidor. El código está en 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 función doPFXEnrollment intenta conectarse al extremo getPFX del servidor web. Si lo logra, el objeto CertificateEnrollmentManager importa el certificado proporcionado y lo instala en el equipo cliente.

Renovación de un certificado PFX

El proceso de renovación de un certificado de intercambio de información personal (PFX) del servidor es básicamente igual que el proceso de instalación inicial, ya que Windows 8 Consumer Preview filtra el antiguo certificado.

El siguiente ejemplo muestra cómo renovar un certificado PFX. El código está en 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 función doPFXRenewal envía una solicitud de un certificado PFX al servidor. Si la solicitud se procesa correctamente, la función importPfxDataAsync importa el certificado proporcionado y lo instala en el equipo cliente. No es necesario quitar el antiguo certificado porque Windows 8 lo filtra.

Temas relacionados

CertificateEnrollmentManager
PasswordVault
Trabajo con certificados
Crear una aplicación de la Tienda Windows para banca
Crear una aplicación de la Tienda Windows para banca: recursos

 

 

Mostrar:
© 2014 Microsoft