Habilitar os domínios personalizados do Azure Active Directory B2C

Antes de começar, use o seletor Escolher um tipo de política para escolher o tipo de política que você está configurando. O Azure Active Directory B2C oferece dois métodos para definir como os usuários interagem com seus aplicativos: por meio de fluxos dos usuários predefinidos ou de políticas personalizadas totalmente configuráveis. As etapas necessárias neste artigo são diferentes para cada método.

Este artigo descreve como habilitar os domínios personalizados nas URLs de redirecionamento do Azure AD B2C (Azure Active Directory B2C). Usando um domínio personalizado verificado, você tem benefícios como:

  • Ele fornece experiência do usuário mais integrada. Da perspectiva do usuário, ele permanece em seu domínio durante o processo de entrada em vez de redirecionar para o domínio padrão do Azure AD B2C <tenant-name>.b2clogin.com.

  • Ao permanecer no mesmo domínio do seu aplicativo durante a entrada, você reduz o impacto do bloqueio de cookies de terceiros.

  • Você aumenta o número de objetos (contas de usuário e aplicativos) que pode criar no locatário do Azure AD B2C do padrão de 1,25 milhão para 5,25 milhões.

Screenshot demonstrates an Azure AD B2C custom domain user experience.

Visão geral do domínio personalizado

Você pode habilitar domínios personalizados do Azure AD B2C usando o Azure Front Door. O Azure Front Door é um ponto de entrada global que usa a rede de borda global da Microsoft para criar aplicativos Web rápidos, seguros e amplamente escalonáveis. Você pode renderizar o conteúdo do Azure AD B2C por trás do Azure Front Door e, em seguida, configurar uma opção no Azure Front Door para entregar o conteúdo através de um domínio personalizado na URL do seu aplicativo.

Assista a este vídeo para saber mais sobre Azure AD B2C domínio personalizado.

O diagrama a seguir ilustra a integração do Azure Front Door:

  1. Em um aplicativo, um usuário seleciona o botão de entrada, que o leva para a página de entrada do Azure AD B2C. Esta página especifica um nome de domínio personalizado.
  2. O navegador da Web resolve o nome de domínio personalizado para o endereço IP do Azure Front Door. Durante a resolução DNS, um registro de nome canônico (CNAME) com um nome de domínio personalizado aponta para o host de front-end padrão do Front Door (por exemplo, contoso-frontend.azurefd.net).
  3. O tráfego endereçado para o domínio personalizado (por exemplo, login.contoso.com) é roteado para o host de front-end padrão do Front Door especificado (contoso-frontend.azurefd.net).
  4. O Azure Front Door invoca o conteúdo do Azure AD B2C usando o domínio padrão do Azure AD B2C<tenant-name>.b2clogin.com. A solicitação para o ponto de extremidade do Azure AD B2C inclui o nome de domínio personalizado original.
  5. O Azure AD B2C responde à solicitação exibindo o conteúdo relevante e o domínio personalizado original.

Diagram shows the custom domain networking flow.

Importante

A conexão do navegador para o Azure Front Door sempre deve usar IPv4 em vez de IPv6.

Ao usar domínios personalizados, considere o seguinte:

  • Você pode configurar vários domínios personalizados. Para obter o número máximo de domínios personalizados com suporte, confira Restrições e limites de serviço do Microsoft Entra para o Azure AD B2C e Assinatura do Azure e limite de serviços, cotas e restrições para o Azure Front Door.
  • O Azure Front Door é um serviço separado do Azure, portanto, encargos extras serão incorridos. Para obter mais informações, consulte Preço do Front Door.
  • Depois de configurar domínios personalizados, os usuários ainda poderão acessar o nome de domínio padrão do Azure AD B2C <tenant-name>.b2clogin.com (a menos que você esteja usando uma política personalizada e bloquear o acesso.
  • Se você tiver vários aplicativos, migre todos eles para o domínio personalizado, pois o navegador armazena a sessão do Azure AD B2C sob o nome de domínio que está sendo usado no momento.

Pré-requisitos

Epata 1: adicionar um nome de domínio personalizado ao diretório do Azure AD B2C

Todo novo locatário do Azure AD B2C vem com um nome de domínio inicial: <domainname>.onmicrosoft.com. Você não pode alterar nem excluir o nome de domínio inicial, mas pode adicionar um domínio personalizado.

Siga estas etapas para adicionar um domínio personalizado ao locatário do Azure AD B2C:

  1. Adicionar o nome de domínio personalizado ao Microsoft Entra ID.

    Importante

    Para essas etapas, certifique-se de entrar no locatário do Azure AD B2C e selecionar o serviço Microsoft Entra ID.

  2. Adicione suas informações de DNS ao registrador de domínios. Depois de adicionar seu nome de domínio personalizado ao Microsoft Entra ID, crie um registro DNS TXT ou MX para seu domínio. A criação desse registro DNS para o domínio verifica a propriedade do nome de domínio.

    Os exemplos a seguir demonstram registros TXT para login.contoso.com e account.contoso.com:

    Nome (nome do host) Tipo Dados
    login TXT MS=ms12345678
    account TXT MS=ms87654321

    O registro TXT deve ser associado ao subdomínio ou ao nome do host do domínio. Por exemplo, a parte logon do domínio contoso.com. Se o nome do host estiver vazio ou @, o Microsoft Entra ID não poderá verificar o domínio personalizado que você adicionou. Nos exemplos a seguir, ambos os registros estão configurados incorretamente.

    Nome (nome do host) Tipo Dados
    TXT MS=ms12345678
    @ TXT MS=ms12345678

    Dica

    Você pode gerenciar o domínio personalizado com qualquer serviço DNS disponível publicamente, como GoDaddy. Se você não tiver um servidor DNS, poderá usar a zona DNS do Azureou domínios do Serviço de Aplicativo.

  3. Verifique seu nome de domínio personalizado. Verifique cada subdomínio ou nome do host que você planeja usar. Por exemplo, para poder entrar com login.contoso.com e account.contoso.com, você precisa verificar ambos os subdomínios, e não apenas o domínio primário contoso.com.

    Importante

    Depois que o domínio for verificado, exclua o registro TXT do DNS que você criou.

Etapa 2: criar uma nova instância do Azure Front Door

Siga estas etapas para criar um Azure Front Door:

  1. Entre no portal do Azure.

  2. Para escolher o diretório que contém a assinatura do Azure que você gostaria de usar para o Azure Front Door e não o diretório que contém o locatário do Azure AD B2C, selecione o ícone Configurações no menu superior para alternar para o locatário do Azure AD B2C no menu Diretórios + assinaturas.

  3. Siga as etapas em Criar perfil do Front Door – Criar Rapidamente para criar um Front Door para seu locatário Azure AD B2C usando as seguintes configurações:

    Chave Valor
    Subscription Selecione sua assinatura do Azure.
    Resource group Selecione um grupo de recursos existente ou crie um.
    Nome Dê um nome ao perfil, como b2cazurefrontdoor.
    Camada Selecione a camada Standard ou Premium. A camada Standard é otimizada para entrega de conteúdo. A camada Premium se baseia na camada Standard com o foco voltado para a segurança. Confira Comparação de camadas.
    Nome do ponto de extremidade Insira um nome exclusivo globalmente para o ponto de extremidade, como b2cazurefrontdoor. O Nome do host do ponto de extremidade é gerado automaticamente.
    Tipo de origem Selecione Custom.
    Nome do host de origem Digite <tenant-name>.b2clogin.com. Substitua <tenant-name> pelo nome de seu locatário do Azure AD B2C como contoso.b2clogin.com.

    Deixe a Política de caching e WAF vazia.

  4. Depois que o recurso do Azure Front Door for criado, selecione Visão geral e copie o Nome do host do ponto de extremidade. É algo semelhante a b2cazurefrontdoor-ab123e.z01.azurefd.net.

  5. Verifique se o nome do host e o cabeçalho do host de origem de sua origem têm o mesmo valor:

    1. Em Configurações, selecione Grupos de Origem.
    2. Selecione seu grupo de origem na lista, como default-origin-group.
    3. No painel direito, selecione o nome do host de origem, como contoso.b2clogin.com.
    4. No painel Atualizar origem, atualize o Nome do host e o Cabeçalho do host de origem para ter o mesmo valor.

    Screenshot of how to update custom domain origins.

Etapa 3: configurar seu domínio personalizado no Azure Front Door

Nesta etapa, você adiciona o domínio personalizado que registrou na Etapa 1 ao seu Azure Front Door.

3.1. Criar um registro DNS CNAME

Adicione o domínio personalizado e crie um registro de nome canônico (CNAME) com o provedor de domínio. Um registro CNAME é um tipo de registro DNS que mapeia um nome de domínio de origem para um nome de domínio de destino (alias). Para o Azure Front Door, o nome de domínio de origem é o seu nome de domínio personalizado e o nome de domínio de destino é nome do host padrão do Front Door que você configurou na Etapa 2. Criar uma nova instância do Azure Front Door. Por exemplo, b2cazurefrontdoor-ab123e.z01.azurefd.net.

Depois que o Front Door verificar o registro CNAME criado, o tráfego endereçado ao domínio personalizado de origem (como login.contoso.com) será roteado para o host de front-end padrão do Front Door de destino especificado, como contoso-frontend.azurefd.net. Para saber mais, consulte adicionar um domínio personalizado ao Front Door.

Para criar um registro CNAME para seu domínio personalizado:

  1. Entre no site do provedor de domínio relativo ao seu domínio personalizado.

  2. Localize a página de gerenciamento de registros DNS consultando a documentação do provedor ou procurando áreas do site rotuladas como Nome de Domínio, DNS ou Gerenciamento do Servidor de Nome.

  3. Crie uma entrada de registro CNAME para seu domínio personalizado e preencha os campos conforme mostrado na seguinte tabela (os nomes dos campos podem variar):

    Fonte Type Destino
    <login.contoso.com> CNAME contoso-frontend.azurefd.net
    • Origem: insira seu nome de domínio personalizado (por exemplo, login.contoso.com).

    • Tipo: Insira CNAME.

    • Destino: insira seu host de front-end do Front Door padrão criado na etapa 2. Ele deve estar no seguinte formato: <nomedohost> .azurefd.net. Por exemplo, contoso-frontend.azurefd.net.

  4. Salve suas alterações.

3.2. Associar o domínio personalizado ao seu Front Door

  1. Na página inicial do portal do Azure, procure e selecione o recurso do Azure Front Door myb2cazurefrontdoor para abri-lo.

  2. No menu esquerdo, em Configurações, selecione Domínios.

  3. Selecione Adicionar um domínio.

  4. Para Gerenciamento de DNS, selecione Todos os outros serviços DNS.

  5. Para Domínio personalizado, insira seu domínio personalizado, como login.contoso.com.

  6. Mantenha os outros valores como padrão e selecione Adicionar. Seu domínio personalizado é adicionado à lista.

  7. Em Estado de validação do domínio que você acabou de adicionar, selecione Pendente. Um painel com informações de registro TXT é aberto.

    1. Entre no site do provedor de domínio relativo ao seu domínio personalizado.

    2. Localize a página de gerenciamento de registros DNS consultando a documentação do provedor ou procurando áreas do site rotuladas como Nome de Domínio, DNS ou Gerenciamento do Servidor de Nome.

    3. Crie um novo registro TXT DNS e preencha os campos, conforme mostrado abaixo:

      1. Nome: _dnsauth.contoso.com, mas você precisa inserir apenas _dnsauth.
      2. Digite: TXT
      3. Valor: algo como 75abc123t48y2qrtsz2bvk.......

      Depois de adicionar o registro TXT DNS, o Estado da validação no recurso do Front Door eventualmente será alterado de Pendente para Aprovado. Talvez seja necessário recarregar sua página para que a alteração aconteça.

  8. Volte para seu portal do Azure. Em Associação de ponto de extremidade do domínio que você acabou de adicionar, selecione Não associado.

  9. Para Selecionar ponto de extremidade, selecione o ponto de extremidade nome do host na lista suspensa.

  10. Para a lista Selecionar rotas, selecione rota padrão e Associar.

3.3. Habilitar a rota

A rota padrão roteia o tráfego do cliente para o Azure Front Door. O Azure Front Door usa sua configuração para enviar o tráfego para o Azure AD B2C. Siga estas etapas para habilitar a rota padrão.

  1. Selecione Gerenciador do Front Door.

  2. Para adicionar a ativação de uma rota padrão, primeiro expanda um ponto de extremidade na lista de pontos de extremidade no gerenciador do Front Door. Selecione a rota padrão.

    A captura de tela a seguir mostra como selecionar a rota padrão.

    Screenshot of selecting the default route.

  3. Marque a caixa de seleção Habilitar rota.

  4. Selecione Atualizar para salvar as alterações.

Etapa 4: configurar CORS

Se você personalizar a interface do usuário do Azure AD B2C com um modelo HTML, você precisará Configurar o CORS com seu domínio personalizado.

Configure o armazenamento de Blob do Azure para o Compartilhamento de Recursos entre Origens seguindo as seguintes etapas:

  1. No Portal do Azure, navegue até sua conta de armazenamento.
  2. No menu, selecione CORS.
  3. Para origens permitidas, insira https://your-domain-name. Substitua your-domain-name pelo nome de domínio. Por exemplo, https://login.contoso.com. Use todas as letras minúsculas ao inserir o nome do locatário.
  4. Para métodos permitidos, selecione ambos GET e OPTIONS.
  5. Para cabeçalhos permitidos, digite um asterisco (*).
  6. Para cabeçalhos expostos, digite um asterisco (*).
  7. Para Idade máxima de, insira 200.
  8. Selecione Salvar.

Testar seu domínio personalizado

  1. Entre no portal do Azure.

  2. Se você tiver acesso a vários locatários, selecione o ícone Configurações no menu superior para alternar para o locatário do Azure AD B2C no menu Diretórios + assinaturas.

  3. No portal do Azure, pesquise e selecione Azure AD B2C.

  4. Em Políticas, selecione Fluxos de usuários (políticas) .

  5. Selecione um fluxo do usuário e, em seguida, selecione Executar fluxo do usuário.

  6. Para Aplicativo, selecione o aplicativo Web denominado webapp1 que você registrou anteriormente. A URL de resposta deve mostrar https://jwt.ms.

  7. Copie a URL em Executar ponto de extremidade de fluxo de usuário.

    Screenshot of how to copy the authorization request U R I.

  8. Para simular uma entrada com o domínio personalizado, abra um navegador da Web e use a URL copiada. Substitua o domínio do Azure AD B2C ( <tenant-name> .b2clogin.com) pelo domínio personalizado.

    Por exemplo, em vez de:

    https://contoso.b2clogin.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_susi&client_id=63ba0d17-c4ba-47fd-89e9-31b3c2734339&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login
    

    use:

    https://login.contoso.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_susi&client_id=63ba0d17-c4ba-47fd-89e9-31b3c2734339&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login    
    
  9. Verifique se o Azure AD B2C foi carregado corretamente. Entre com uma conta local.

  10. Repita o teste com o restante de suas políticas.

Configuração do seu provedor de identidade

Quando um usuário opta por entrar com um provedor de identidade social, o Azure AD B2C inicia uma solicitação de autorização e leva o usuário para o provedor de identidade selecionado para concluir o processo de entrada. A solicitação de autorização especifica o redirect_uri com o nome de domínio padrão do Azure AD B2C:

https://<tenant-name>.b2clogin.com/<tenant-name>/oauth2/authresp

Se você tiver configurado sua política para permitir a entrada com um provedor de identidade externo, atualize os URIs de redirecionamento do OAuth com o domínio personalizado. A maioria dos provedores de identidade permite que você registre vários URIs de redirecionamento. É recomendável adicionar URIs de redirecionamento em vez de substituí-las para que você possa testar sua política personalizada sem afetar os aplicativos que usam o nome de domínio padrão do Azure AD B2C.

No seguinte URI de redirecionamento:

https://<custom-domain-name>/<tenant-name>/oauth2/authresp
  • Substitua <custom-domain-name> pelo nome de domínio personalizado.
  • Substitua <tenant-name> pelo nome do locatário ou ID do locatário.

O exemplo a seguir mostra um URI de redirecionamento do OAuth válido:

https://login.contoso.com/contoso.onmicrosoft.com/oauth2/authresp

Se você optar por usar a ID do locatário, um URI de redirecionamento do OAuth válido teria a aparência do seguinte exemplo:

https://login.contoso.com/11111111-1111-1111-1111-111111111111/oauth2/authresp

Os metadados dos provedores de identidade SAML teriam a aparência do seguinte exemplo:

https://<custom-domain-name>.b2clogin.com/<tenant-name>/<your-policy>/samlp/metadata?idptp=<your-technical-profile>

Configurar seu aplicativo

Depois de configurar e testar o domínio personalizado, você pode atualizar seus aplicativos para carregar a URL que especifica o domínio personalizado como o nome do host em vez do domínio Azure AD B2C.

A integração de domínio personalizado se aplica a pontos de extremidade de autenticação que usam políticas do Azure AD B2C (fluxos de usuário ou políticas personalizadas) para autenticar usuários. Esses pontos de extremidade podem ter a aparência do seguinte exemplo:

  • https://<custom-domain>/<tenant-name>/<policy-name>/v2.0/.well-known/openid-configuration

  • https://<custom-domain>/<tenant-name>/<policy-name>/oauth2/v2.0/authorize

  • https://<custom-domain>/<tenant-name>/<policy-name>/oauth2/v2.0/token

Substitua:

Os metadados do provedor de serviços SAML teriam a aparência do seguinte exemplo:

https://custom-domain-name/tenant-name/policy-name/Samlp/metadata

(Opcional) Usar ID do locatário

Você pode substituir o nome do locatário B2C na URL pelo GUID da ID do locatário para remover todas as referências a "B2C" na URL. Você pode encontrar o GUID da ID do locatário na página Visão Geral do B2C no portal do Azure. Por exemplo, altere https://account.contosobank.co.uk/contosobank.onmicrosoft.com/ para https://account.contosobank.co.uk/<tenant ID GUID>/

Se você optar por usar a ID do locatário em vez do nome do locatário, certifique-se de atualizar os URIs de redirecionamento do OAuth do provedor de identidade corretamente. Para obter mais informações, consulte Configurar o provedor de identidade.

Emissão de token

A declaração do nome do emissor do token (ISS) é alterada com base no domínio personalizado que está sendo usado. Por exemplo:

https://<domain-name>/11111111-1111-1111-1111-111111111111/v2.0/

(Opcional) Bloquear o acesso ao nome de domínio padrão

Depois de adicionar o domínio personalizado e configurar o aplicativo, os usuários ainda poderão acessar o domínio <tenant-name>.b2clogin.com. Para impedir o acesso, você pode configurar a política para verificar o "nome do host" da solicitação de autorização em uma lista de domínios permitidos. O nome do host é o nome de domínio que aparece na URL. O nome do host está disponível através dos {Context:HostName}resolvedores de declarações. Em seguida, você pode apresentar uma mensagem de erro personalizada.

  1. Obtenha o exemplo de uma política de acesso condicional que verifica o nome do host no GitHub.
  2. Em cada arquivo, substitua a cadeia de caracteres yourtenant pelo nome do seu locatário do Azure AD B2C. Por exemplo, se o nome do seu locatário B2C for contosob2c, todas as instâncias de yourtenant.onmicrosoft.com se tornarão contosob2c.onmicrosoft.com.
  3. Carregue os arquivos de política na seguinte ordem: B2C_1A_TrustFrameworkExtensions_HostName.xml e, em seguida, B2C_1A_signup_signin_HostName.xml.

(Opcional) Configuração avançada do Azure Front Door

Você pode usar a configuração avançada do Azure Front Door, como WAF (Firewall de Aplicativo Web) do Azure. O Azure WAF fornece proteção centralizada de seus aplicativos Web contra vulnerabilidades e explorações comuns.

Ao usar domínios personalizados, considere os seguintes pontos:

  • A política de WAF deve ser da mesma camada que o perfil do Azure Front Door. Para obter mais informações sobre como criar uma política de WAF a ser usada com o Azure Front Door, confira Configurar política de WAF.
  • O recurso de regras gerenciadas do WAF não tem suporte oficial, pois pode causar falsos positivos e impedir a passagem de solicitações legítimas. Portanto, use apenas regras personalizadas do WAF se atenderem às suas necessidades.

Solução de problemas

O Azure AD B2C exibe uma mensagem de erro de página não encontrada

  • Sintoma – você configura um domínio personalizado, mas uma mensagem de erro HTTP 404 será exibida ao tentar entrar com o domínio personalizado.
  • Possíveis causas - esse problema pode estar relacionado à configuração do DNS ou à configuração de back-end do Azure Front Door.
  • Resolução:
    • Verifique se o domínio personalizado foi registrado e verificado com êxito no locatário do Azure AD B2C.
    • Verifique se o domínio personalizado está configurado corretamente. O registro CNAME do seu domínio personalizado deve apontar para o host de front-end padrão do Azure Front Door (por exemplo, contoso-frontend.azurefd.net).

Nossos serviços não estão disponíveis no momento

  • Sintoma – você configura um domínio personalizado, mas quando tenta entrar com o domínio personalizado, obtém a seguinte mensagem de erro: Nossos serviços não estão disponíveis no momento. Estamos trabalhando para restaurar todos os serviços o mais rápido possível. Verifique novamente em breve.

  • Possíveis causas – esse problema pode estar relacionado à configuração de rota do Azure Front Door.

  • Resolução: verifique o status da rota padrão. Se estiver desabilitado, Habilite a rota. A seguinte captura de tela mostra como a rota padrão deve ser:

    Screenshot of the status of the default-route.

O Azure AD B2C retorna que o recurso que você está procurando foi removido, teve seu nome alterado ou está temporariamente indisponível.

  • Sintoma – você configura um domínio personalizado, mas recebe a mensagem de erro que o recurso que você está procurando foi removido teve seu nome alterado ou está temporariamente indisponível quando tenta entrar com o domínio personalizado.
  • Possíveis causas – esse problema pode estar relacionado à verificação de domínio personalizado do Microsoft Entra.
  • Resolução: certifique-se de que o domínio personalizado seja registrado e verificado com êxito no locatário do Azure AD B2C.

Identificar provedor retorna um erro

  • Sintoma - após configurar um domínio personalizado, você poderá entrar com contas locais. Mas quando você entra com credenciais de provedores de identidade social ou corporativa externos, o provedor de identidade apresenta uma mensagem de erro.
  • Causas possíveis - quando o Azure AD B2C leva o usuário para entrar com um provedor de identidade federada, ele especifica o URI de redirecionamento. O URI de redirecionamento é o ponto de extremidade para onde o provedor de identidade retorna o token. O URI de redirecionamento é o mesmo domínio usado pelo seu aplicativo com a solicitação de autorização. Se o URI de redirecionamento ainda não estiver registrado no provedor de identidade, ele poderá não confiar no novo URI de redirecionamento, o que resultará em uma mensagem de erro.
  • Resolução - siga as etapas em Configurar seu provedor de identidade para adicionar o novo URI de redirecionamento.

Perguntas frequentes

Quando uso Executar Agora para tentar executar minha política, por que não consigo ver o domínio personalizado?

Copie a URL, altere o nome de domínio manualmente e cole-a novamente no navegador.

Qual endereço IP é apresentado no Azure AD B2C? O endereço IP do usuário ou o endereço IP do Azure Front Door?

O Azure Front Door passa o endereço IP original do usuário. É o endereço IP que você verá no relatório de auditoria ou na política personalizada.

Importante

Se o cliente enviar um cabeçalho x-forwarded-for para o Azure Front Door, o Azure AD B2C usará o x-forwarded-for do originador como o endereço IP do usuário para a Avaliação de Acesso Condicional e o {Context:IPAddress}resolvedor de declarações.

Posso usar um WAF (firewall do aplicativo Web) de terceiros com B2C?

Sim, o Azure AD B2C dá suporte ao BYO-WAF (Firewall de Aplicativo Web Bring Your Own). No entanto, você deve testar o WAF para garantir que ele não bloqueie ou alerte solicitações legítimas para fluxos de usuário do Azure AD B2C ou políticas personalizadas. Saiba como configurar o WAF do Akamai e o WAF do Cloudflare com o Azure AD B2C.

Minha instância do Azure Front Door pode ser hospedada em uma assinatura diferente do meu locatário do Azure AD B2C?

Sim, o Azure Front Door pode estar em uma assinatura diferente.

Próximas etapas

Saiba mais sobre Solicitações de autorização do OAuth.