Aplicativo da Windows Store para bancos: passo a passo do código (aplicativos da Windows Store em JavaScript e HTML)

Este exemplo mostra como criar um aplicativo simples da Windows Store para bancos que implementa a autenticação e a comunicação seguras pela Internet. Você pode usar o código neste exemplo para qualquer aplicativo da Windows Store que peça interação segura com um servidor.

As próximas seções descrevem as partes do aplicativo da Windows Store para bancos que habilitam a autenticação segura.

Pré-requisitos

Microsoft Visual Studio Express 2012 para Windows 8

Microsoft Visual Studio Professional 2012

Microsoft Visual Studio Ultimate 2012

Licença de desenvolvedor

Observação  Para executar o aplicativo bancário, você precisará de um serviço Web que forneça pontos de extremidade para comunicação com o servidor. Os tópicos a seguir mostram implementações do controlador System.Web.Mvc para autenticação, registro de certificado e renovação de certificado.

Locais de download

Baixe o exemplo de código completo do seguinte local: Aplicativo da Windows Store para bancos com autenticação forte.

Executando o aplicativo

O aplicativo da Windows Store para bancos usou como modelo os aplicativos Web existentes para bancos que oferecem autenticação baseada em certificado. Ao executar o aplicativo pela primeira vez, você entra com um nome de usuário e senha que limitam o acesso à sua conta. Em seguida, você fecha o aplicativo e o reinicia, dessa vez optando pela atualização para um certificado. Finalmente, você fecha e reinicia o aplicativo e, quando clica em Sign in to your account (Entrar em sua conta), tem acesso pleno à sua conta sem inserir suas credenciais.

Autenticação baseada em senha

Primeiro execute as etapas a seguir.

  • Inicie o aplicativo bancário.
  • Clique em Sign in to your account (Entrar em sua conta).
  • Faça login com nome de usuário e senha, que pode ser qualquer cadeia não-vazia, e clique em Enviar.

    A página de contas diz que você tem acesso limitado devido a autenticação baseada em senha.

Atualizando para autenticação baseada em certificado

Sua conta estará totalmente acessível quando você atualizar das credenciais de nome de usuário/senha para a autenticação baseada em certificado.

  • Feche e reinicie o aplicativo.
  • Clique em Upgrade to stronger authentication (Atualizar para autenticação mais forte).
  • O aplicativo solicita que você o atualize e explica os benefícios da atualização.
  • Marque Chave gerada pelo servidor (instalar PFX) e clique em Sim.

    O aplicativo se inscreve para um certificado e autentica o usuário.

Acessar a conta usando autenticação baseada em certificado

Feche o aplicativo. Ao reiniciá-lo, você não precisará fazer logon com seu nome de usuário e senha.

  • Inicie o aplicativo novamente e clique em Entrar em sua conta.

    Como o certificado por aplicativo está disponível, ele é usado para autenticação. Uma caixa de diálogo é apresentada para confirmar o certificado. Uma vez que você estiver autenticado, a página de contas explica que você tem acesso total.

Meta: armazenar credenciais de logon de usuário com segurança

Você armazena credenciais de nome de usuário e senha com segurança em seu aplicativo da Windows Store usando o PasswordVault.

Meta: configurar o manifesto para um aplicativo seguro

Você especifica funcionalidades e certificados para seu aplicativo da Windows Store modificando o manifesto do pacote do aplicativo.

Meta: fazer logon no servidor

O aplicativo da Windows Store para bancos mostra como lidar com um usuário que entra em uma sessão bancária online. O servidor verifica o certificado do usuário, e o aplicativo exibe a página apropriada com base no resultado.

Meta: solicitar um certificado

Você pode optar por solicitar um certificado com uma chave gerada pelo cliente ou com uma chave gerada pelo servidor. O aplicativo da Windows Store para bancos mostra as duas formas usando as funções createRequestAsync e importPfxDataAsync.

Meta: renovar um certificado

A renovação de um certificado, com uma chave gerada pelo cliente ou uma chave gerada pelo servidor, é tão fácil quanto a solicitação de um novo certificado. O aplicativo da Windows Store para bancos mostra as duas formas usando as funções createRequestAsync e importPfxDataAsync.

Configurações do pacote e o manifesto do aplicativo

Você controla a implantação de um aplicativo da Windows Store modificando um arquivo de manifesto do aplicativo chamado package.appxmanifest ou AppxManifest.xml. Você pode usar o Visual Studio Express 2012 para Windows 8 para aplicar as configurações ao arquivo de manifesto ou modificar diretamente o arquivo.

No Gerenciador de Soluções, clique duas vezes em package.appxmanifest para abrir o designer de manifesto.

Configurações do pacote: propriedades da interface do usuário do aplicativo

Na página Interface do Usuário do Aplicativo, as seguintes propriedades são configuradas conforme é mostrado.

PropriedadeValor
Página Inicialdefault.html
Nome para ExibiçãoAll Logos
Nome CurtoTBA
Texto de Primeiro PlanoEscuro
Cor da Tela de Fundo#000000
Notificações de Tela de Bloqueio(não definido)
Rotação InicialRetrato

 

Configurações do pacote: funcionalidades do aplicativo

Na página Funcionalidades, Internet (Cliente) e Redes Privadas (Cliente e Servidor) estão marcados. Para usar um certificado compartilhado, certifique-se de que Certificados de Usuário Compartilhados está marcado. Para saber mais, veja Definindo funcionalidades de repositórios de certificados.

Observação  Para usar cartões inteligentes com o aplicativo bancário, você deve especificar a funcionalidade sharedUserCertificates no manifesto do aplicativo.

O exemplo a seguir mostra como declarar as funcionalidades do seu aplicativo no manifesto do aplicativo. O código está em package.appxmanifest.


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

Configurações do pacote: declarações de certificado

Você atribui um certificado raiz confiável e outros certificados digitais usando declarações de certificado. O procedimento a seguir descreve como usar o designer de declaração para adicionar um novo certificado raiz. Para saber mais, veja Usando o manifesto para instalar certificados.

Se Certificados não estiver listado em Declarações com Suporte, use as etapas a seguir para adicionar um certificado raiz.

  • Abra a página Declarações.
  • Na lista suspensa Declarações Disponíveis, selecione Certificados e clique em Adicionar.

    O designer de certificado é aberto.

  • Em TrustFlags, certifique-se de que ExclusiveTrust está marcado.
  • Em Critérios de Seleção, certifique-se de que AutoSeleção está marcado.
  • Em Certificados, clique em Adicionar Novo.
  • Na caixa de texto StoreName, digite Root.
  • Na caixa de texto Conteúdo, digite myroot.cer.

O exemplo a seguir mostra como atribuir os certificados raiz e de desenvolvedor. O código está em 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>

Configurações do pacote: propriedades do pacote

Na página Pacote, configure Nome do Pacote como Microsoft.SDKSamples.TailoredBankAppShare e defina o Nome de Exibição do Pacote como TailoredBankAppShare SDK Sample.

Fazendo logon no servidor com nome de usuário e senha

Use o PasswordVault para armazenar e recuperar as credenciais de senha para um aplicativo seguro. Para reforçar a segurança, o aplicativo bancário estimula o usuário a fazer a atualização para autenticação baseada em certificado.

O exemplo a seguir mostra como implementar o logon com credenciais de nome de usuário e senha em um aplicativo seguro. O código está em 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;
        }
    );
};

O nome de usuário e senha são adicionados ao PasswordVault e enviados para o ponto de extremidade simplelogon do serviço Web usando a função xhr. Se a solicitação é bem-sucedida, account.html é exibido.

Solicitando um certificado e fazendo o registro

Para reforçar a segurança, o aplicativo bancário estimula o usuário a fazer a atualização para autenticação baseada em certificado. Você pode criar uma solicitação de certificado no aplicativo cliente ou importar um certificado de troca de informações pessoais (PFX) do servidor. Em ambos os casos, o registro é feito usando o objeto CertificateEnrollmentManager.

Enviando uma solicitação de certificado a um servidor

O aplicativo da Windows Store pode enviar uma solicitação de certificado a uma autoridade de certificação que esteja executando os serviços de certificados da Microsoft, e você pode usar o CertificateEnrollmentManager para instalar o certificado emitido. Para saber mais, veja Enviando uma solicitação de certificado e instalando a resposta de certificado.

O exemplo a seguir mostra como solicitar um certificado com uma chave gerada pelo cliente. O código está em 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;
    };
}

A função createRequestBlobAndEnroll usa o objeto CertificateEnrollmentManager para gerar uma solicitação de certificado e enviá-la para o servidor. Se a solicitação é bem-sucedida, a função installCertificateAsync instala o certificado fornecido.

Renovando com uma chave gerada pelo cliente

A renovação de um certificado é um procedimento praticamente idêntico à sua primeira instalação, porque o Windows 8 filtra e remove o certificado antigo.

O exemplo a seguir mostra como solicitar um certificado com uma chave gerada pelo cliente. O código está em 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;
    };
}

A função createRequestBlobAndEnroll usa o objeto CertificateEnrollmentManager para gerar uma solicitação de certificado e enviá-la para o servidor. Se a solicitação é bem-sucedida, a função installCertificateAsync instala o certificado fornecido. Não é necessário remover o certificado antigo, porque ele é filtrado e removido pelo Windows 8.

Verificando um certificado

Você pode consultar o status de um certificado e exibir diferentes páginas dependendo do resultado.

O exemplo a seguir mostra como verificar um certificado e exibir diferentes páginas dependendo do resultado. O código está em 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;
        }
    );
}

A função checkCert consulta o ponto de extremidade CheckCert do serviço Web e analisa a resposta. Se a resposta é um certificado, o aplicativo verifica se o certificado precisa ser renovado e, em caso afirmativo, chama a função de renovação apropriada. Caso contrário, é exibida a página da conta com autenticação forte.

Atualizando para autenticação baseada em certificado

Para reforçar a segurança, o aplicativo bancário estimula o usuário a fazer a atualização para autenticação baseada em certificado. Você pode criar uma solicitação de certificado no aplicativo cliente ou importar um certificado de troca de informações pessoais (PFX) do servidor. Em ambos os casos, o registro é feito usando o objeto CertificateEnrollmentManager.

Importando um certificado PFX de um servidor

O exemplo a seguir mostra como importar um certificado PFX de um servidor. O código está em 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;
        }
    );
}

A função doPFXEnrollment tenta se conectar ao ponto de extremidade getPFX do serviço Web. Se a tentativa é bem-sucedida, o objeto CertificateEnrollmentManager importa o certificado fornecido e o instala na máquina cliente.

Renovando um certificado PFX

A renovação de um certificado de troca de informações pessoais (PFX) é um procedimento praticamente idêntico à sua instalação inicial, porque o Windows 8 filtra e remove o certificado antigo.

O exemplo a seguir mostra como renovar um certificado PFX . O código está em 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;
        }
    );
}

A função doPFXRenewal envia ao servidor uma solicitação de um certificado PFX. Se a solicitação é bem-sucedida, a função importPfxDataAsync importa o certificado fornecido e o instala na máquina cliente. Não é necessário remover o certificado antigo, porque ele é filtrado e removido pelo Windows 8.

Tópicos relacionados

CertificateEnrollmentManager
PasswordVault
Trabalhando com certificados
Criando um aplicativo da Windows Store para bancos
Criar um aplicativo da Windows Store para bancos: recursos

 

 

Mostrar:
© 2014 Microsoft