Você está aqui:
Práticas recomendadas de autenticação e autorização no B2C Commerce
A exploração de vulnerabilidades no controle de acesso é uma habilidade nata dos invasores. Para proteção contra os ataques, imponha verificações de controle de acesso no lado do servidor para funções de negócios como gerenciamento de conta, gerenciamento de pedidos e compra.
Para controlar o acesso a objetos confidenciais, use autenticação e autorização. Alguns exemplos de objetos confidenciais são:
- Pedido
- Cliente
- CustomerPaymentInstrument
- OrderPaymentInstrument
- Carrinho
Objetos da Script API são identificados com o uso de identificadores de objetos (UUID, ID, Token). Conhecer os identificadores não dá acesso de leitura ou gravação para objetos confidenciais. Sempre efetue autenticação e autorização adicionais na loja (virtual) antes de processar qualquer solicitação. Algumas das script APIs fornecem tanto métodos seguros como inseguros. Embora os métodos inseguros acomodam casos de uso legados, é altamente recomendado usar métodos seguros.
Por exemplo, a classe OrderMgr fornece duas assinaturas para o método getOrder:
static getOrder(orderNumber : String)
static getOrder(orderNumber : String, orderToken : String)
A segunda assinatura é o método seguro. Para obter mais informações, consulte Class OrderMgr.
Autenticação
Se utiliza o Storefront Reference Architecture (SFRA) no caminho de acesso do cartridge, você pode usar o próprio recurso de middleware userLoggedIn do SFRA para verificar se a solicitação vem de um usuário autenticado. Esse middleware expõe a função validateLoggedIn, para verificar se o usuário está autenticado para chamar a função. O middleware também expõe a função validateLoggedInAjax, para validar se o usuário está autenticado a partir de uma solicitação AJAX.
var userLoggedIn = require('*/cartridge/scripts/middleware/userLoggedIn');
server.get(
'Show',
server.middleware.https,
userLoggedIn.validateLoggedIn,
consentTracking.consent,
function (req, res, next) {
var CustomerMgr = require('dw/customer/CustomerMgr');
var Resource = require('dw/web/Resource');
var URLUtils = require('dw/web/URLUtils');
Este trecho de código inclui o middleware userLoggedIn para uma função de negócios exposta.
Se você usa SiteGenesis no caminho de acesso do cartridge, pode usar proteções para abranger funções do controlador quando forem exportadas. As funções especificadas no modulo de proteção agem como um filtro de solicitações. Você pode especificar níveis de acesso variados para a funcionalidade de controlador.
- Exigir HTTPS.
- Exigir ou proibir um certo método de HTTP, como GET ou POST.
- Exigir que um usuário atual esteja conectado.
Este exemplo mostra um controlador de perfil de edição que requer HTTP e que o usuário esteja conectado.
exports.EditProfile = guard.ensure(['get', 'https', 'loggedIn'], editProfile);
Autorização
Quando implementar operações de loja (virtual), use verificações de autorização relevantes para o fluxo de trabalho dos seus negócios. Quando executar uma ação administrativa em um objeto confidencial, autentique o usuário solicitante usando um segredo sobre esse objeto. Por exemplo, quando um visitante cria uma conta após pagar com sucesso, e o pedido é reatribuído a esse visitante, autentique o usuário usando um segredo sobre o pedido. Essa estratégia fornece alta confiabilidade em que o usuário solicitante é o usuário que criou o objeto.
As seções a seguir incluem exemplos de verificações de autorização para o objeto do Pedido para compradores registrados e visitantes.
Compradores registrados
Quando um comprador registrado desejar acessar um pedido, verifique as seguintes informações na loja (virtual):
- O comprador é autenticado. Para obter mais informações, consulte as informações de autenticação exibidas antes neste tópico.
- O pedido tem estado cancelável. Se um estado será cancelável depende do fluxo do gerenciamento de pedidos de cada loja (virtual). Consulte os estados suportados na Classe Pedido.
- O comprador é o proprietário do pedido a ser cancelado.
var orderCustomer = order.getCustomer();
var sessionCustomer = session.getCustomer();
If ( orderCustomer.ID === sessionCustomer.ID ) {
// O comprador que fez logon é o dono do pedido
// execute ações de acordo com o fluxo de trabalho do gerenciamento de pedidos
...
} else {
// Um usuário tenta acessar um pedido que não pertence a ele
// Rejeitar esta solicitação com uma mensagem de erro (HTTP 401 não autorizado ou uma página de erro personalizada)
// Registre uma mensagem de erro para rastrear esta ocorrência
}
Compradores visitantes
Implementar um esquema robusto de autenticação e autorização que se aplique a compradores visitantes (não registrados) é mais desafiador do que para compradores registrados. Para reduzir o risco de fraude, considere as seguintes opções conforme for aplicável para seu caso de uso:
- Proibir que compradores visitantes alterem pedidos existentes; solicite que criem uma conta quando tentarem alterar pedidos.
- Permitir o acesso a um pedido somente se o comprador puder produzir o número de pedido, token do pedido e uma combinação de outros dados incluídos no pedido, como:
- Sobrenome
- Código postal
- Número de telefone
- Não permitir que compradores visitantes tenham acesso a pedidos que pertencem a usuários registrados.
- Limitar as ações permitidas ao mínimo indispensável. Por exemplo:
- Não exibir informações pessoais ou de pagamento armazenadas no pedido.
- Não permitir alterações que deixariam que um usuário malicioso modifique o pedido, por exemplo alterando o endereço de entrega.
- Implementar controles de proteção de bot/script para proteção contra ataques de força bruta. Por exemplo:
- Limite de taxa
- CAPTCHA

