As empresas estão sempre em busca de formas de oferecer uma autenticação mais segura e uma experiência melhor para o usuário. Além disso, precisam centralizar a autenticação e a autorização dos usuários sem replicar credenciais e permissões em outro provedor de identidade (IDP).
Neste blog, vamos mostrar como configurar o Auth0 como provedor SAML 2.0 federado com um Active Directory corporativo já existente, atuando como Single Sign-On para transmitir o Amazon Workspaces.
A plataforma de identidade e gerenciamento da Auth0 oferece mais controle, segurança reforçada e facilidade de uso. Ela entrega Single Sign-On (SSO) por diferentes caminhos, como federação corporativa, login social ou autenticação tradicional por usuário e senha. Ou seja, seus usuários fazem login uma única vez e ganham acesso a todas as aplicações disponíveis para eles.
Arquitetura em alto nível
Veja abaixo um panorama do que foi montado no ambiente. Para simplificar a configuração, colocamos tudo em uma única VPC, conforme descrito a seguir.
- Controladores de domínio em uma subnet privada.
- AWS Directory Service configurado com AD Connector.
- Nat Gateways em uma subnet pública para que os controladores de domínio consigam se comunicar com o Auth0.
- Amazon Workspaces em uma subnet privada.
Passo a passo
São seis etapas para concluir a configuração.
- Criar um App no Auth0 e gerar um manifesto de Metadata.
- Criar um Provedor de Identidade SAML no AWS Identity and Access Management (IAM).
- Criar uma IAM Role e uma IAM Policy para Federação SAML 2.0.
- Configurar o Auth0 e as asserções SAML.
- Habilitar a integração SAML 2.0 no diretório do seu workspace.
- Testar a configuração.
Pré-requisitos
- Conta Auth0 com o Active Directory connector configurado.
- Active Directory Connector configurado para o AWS Directory Service.
- Um Amazon Workspace provisionado no mesmo diretório.
Passo 1: criar um App no Auth0 e gerar um manifesto de Metadata
- Acesse o Management Dashboard do Auth0 e crie uma nova Application.
- Na aba Addons, habilite o addon SAML2 Web App.
- Configure o addon usando o pop-up que aparece depois que você habilita o SAML2 Web App. Na aba Settings, preencha o Application Callback URL com https://signin.aws.amazon.com/saml e cole o código de configuração SAML abaixo, em formato JSON, no campo Settings:
{
"audience": "https://signin.aws.amazon.com/saml",
"mappings": {
"email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sAMAccountName",
"name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"
},
"createUpnClaim": false,
"passthroughClaimsWithNoMapping": false,
"mapUnknownClaimsAsIs": false,
"mapIdentities": false,
"nameIdentifierFormat": "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent",
"nameIdentifierProbes": [\
"http://schemas.auth0.com/sAMAccountName"\
]
}

- Role até o final da página e clique em Enable.
- Clique na aba Usage para baixar o arquivo de manifesto de metadata. Você vai precisar dele no próximo passo.

- Feche a janela do SAML2 Web App e clique em Connections. Em Enterprise, selecione o Active Directory/LDAP Connector correto.
Passo 2: criar um Provedor de Identidade SAML no AWS Identity and Access Management (IAM)
- Faça login na sua conta AWS e abra o console do IAM.
- No painel de navegação, clique em Identity Providers e depois em Add Provider.
- Em Provider Type, escolha SAML, dê um nome significativo e adicione tags conforme necessário. Em Metadata Document, clique em Choose File, selecione o documento de metadata SAML que você baixou no passo anterior e clique em Open. Depois disso, clique em Add Provider, na parte de baixo da tela.
- Confira as informações fornecidas e clique em Create.
- Anote o ARN deste Provider, pois você vai precisar dele no passo 4.
Passo 3: criar uma IAM Role e uma IAM Policy para Federação SAML 2.0
- No painel de navegação, clique em Roles e depois em Create Role.
- Em Role type, escolha SAML 2.0 federation.
- Selecione o SAML Provider criado no passo anterior.
- Em Attribute, selecione SAML:sub_type. Em Value, digite persistent. Esse passo restringe o acesso à role apenas a solicitações de streaming de usuários SAML que incluam uma asserção do tipo SAML subject com valor persistent.
- Revise as informações de confiança SAML 2.0, confirmando a entidade confiável e a condição corretas, e clique em Next: Permissions.
- Na página Attach permissions policies, clique em Next: Tags.
- Quando terminar, clique em Next: Review. A inline policy desta role será criada e incorporada mais adiante.
- Em Role name, digite um nome que ajude a identificar a finalidade da role. Como diferentes entidades podem fazer referência a ela, o nome não pode ser editado depois de criada.
- (Opcional) Em Role description, digite uma descrição para a nova role.
- Revise os detalhes da role e clique em Create role.
- Selecione a role que você criou, clique em Trust relationships e em Edit trust relationship.
- Atualize a action para permitir sts:TagSession.
A Policy deve ficar assim:
{
"Version": "2012-10-17",
"Statement": [\
{\
"Effect": "Allow",\
"Principal": {\
"Federated": "arn:aws:iam:::saml-provider/name"\
},\
"Action": [\
"sts:AssumeRoleWithSAML",\
"sts:TagSession"\
],\
"Condition": {\
"StringEquals": {\
"SAML:sub_type": "persistent"\
}\
}\
}\
]
}
Agora vamos incorporar uma Inline Policy à role que acabamos de criar.
- Selecione a IAM role criada e, na aba de permissões, clique em Add Permissions->Create Inline Policy.
- Vá para a aba JSON e cole a policy abaixo. Atualize a region, o Account ID e o directory ID de acordo com a sua configuração.
{
"Version": "2012-10-17",
"Statement": [\
{\
"Effect": "Allow",\
"Action": "workspaces:Stream",\
"Resource": "arn:aws:workspaces:<region>:<account-id>:directory/<directory-id>",\
"Condition": {\
"StringEquals": {\
"workspaces:userId": "${saml:sub}"\
}\
}\
}\
]
}
Não esqueça de atualizar a region, o account ID e o directory ID.
- Quando terminar, clique em next, dê um nome à policy e clique em Create Policy.
Passo 4: configurar o Auth0 e as asserções SAML
- Acesse o Management Dashboard do Auth0 e vá em Actions->Library-> Build Custom
- Dê um nome, mantenha o trigger como Login/Post Login e o runtime como Node 18 e clique em Create.

- Na próxima tela, copie e cole o código abaixo e clique em Deploy.
exports.onExecutePostLogin = async (event, api) => {
if (event.client.name === "APP_NAME") {
const awsRole = 'IAM_arn,saml_provider_arn';
const awsRoleSession = event.user.sAMAccountName;
const email = event.user.emails[0];
api.samlResponse.setDestination('https://signin.aws.amazon.com/saml');
api.samlResponse.setAttribute('https://aws.amazon.com/SAML/Attributes/Role', awsRole)
api.samlResponse.setAttribute('https://aws.amazon.com/SAML/Attributes/RoleSessionName', awsRoleSession)
api.samlResponse.setAttribute('https://aws.amazon.com/SAML/Attributes/PrincipalTag:Email', email)
}
return;
};
Substitua App_Name pelo nome do App Auth0 que você criou no passo 1. Depois, troque IAM_arn pelo ARN da IAM role criada no passo 3 e saml_provider_arn pelo ARN do SAML provider criado no passo 2.
- Depois, vá em Actions->Library-> Flows e clique em Login.
- No painel à direita, em Add Action, clique em Custom e arraste a action que você criou para entre Start e Complete.

- Clique em Apply.
Passo 5: habilitar a integração SAML 2.0 no diretório do seu workspace
Esta é a etapa final para concluir a configuração.
- Acesse o AWS Management Console e vá em Workspaces-> Directories.
- Clique no diretório usado pelo seu workspace.
- Clique em Edit Authentication.
- Na tela de edição de autenticação, clique em Edit SAML 2.0 Identity Provider.
- Clique em Enable SAML 2.0 Authentication e informe a URL de login do seu Identity Provider em User Access URL. Você pode manter o nome do parâmetro IdP deep link como "RelayState".
Passo 6: testar a configuração
- Abra o Amazon Workspaces Client para testar a configuração e informe seu código de registro. Você deve ver algo parecido com a tela abaixo.
- Clique em Continue para fazer login no Workspaces. Você será redirecionado para a página de login do seu IDP, que deve ser parecida com a imagem a seguir.
- Faça login com seu usuário e senha do AD. Após a autenticação bem-sucedida, você verá algo parecido com a imagem abaixo.
- Clique em Open Workspaces e a tela de login aparecerá com o nome de usuário já preenchido.
- Digite a senha e o workspace começará a ser inicializado.
- Quando o workspace iniciar, o desktop deve carregar.
