Reativando o login para usuários de SSO (Open Source) (Open Source)
Quando isso se aplica
O SSO (SAML, OIDC, OAuth) é um recurso do DefectDojo Pro. Se você atualizar para o DefectDojo open source 3.x (ou de alguma outra forma deixar de usar o Pro), as opções de login via SSO são removidas, e os usuários que foram provisionados por SSO não conseguem mais fazer login. As contas deles nunca receberam uma senha local, e a interface e a API não permitem definir uma para eles: o DefectDojo os detecta como contas de SSO e bloqueia a alteração.
Você não precisa excluir e recriar esses usuários (o que faria você perder o histórico, as permissões e a propriedade dos objetos deles). Em vez disso, defina uma senha local para cada conta no backend e force uma redefinição de senha no próximo login.
Veja a seção de SSO e as notas de atualização da versão 3.0 para entender o contexto de o SSO ser exclusivo do Pro.
Por que isso acontece
O DefectDojo open source autentica apenas contra o banco de dados local de usuários do Django. Ele decide se uma conta é uma “usuária de SSO” unicamente pelo fato de a conta ter ou não uma senha utilizável. As contas provisionadas via SSO foram criadas com uma senha inutilizável, então:
- o login local falha (não há senha para verificar), e
- o controle Forçar redefinição de senha na interface e na API fica bloqueado, com uma mensagem informando que o usuário está autorizado via SSO.
Definir uma senha real resolve as duas condições de uma vez: a conta passa a conseguir fazer login localmente, e a flag de redefinição forçada passa a poder ser definida.
A solução alternativa
Execute estes passos a partir do shell do Django dentro do container uwsgi:
docker compose exec -it uwsgi ./manage.py shellExemplo para um único usuário
from dojo.user.models import Dojo_User, UserContactInfo
u = Dojo_User.objects.get(username="alice@example.com")
u.set_password("<temporary-strong-password>") # makes the account a local login account
u.save()
uci, _ = UserContactInfo.objects.get_or_create(user=u)
uci.force_password_reset = True # force a change on next login
uci.save()O que o usuário faz em seguida
Entregue a senha temporária a cada usuário por um canal separado (e-mail, o chat da sua equipe, ou da forma como você costuma compartilhar segredos). No próximo login, o DefectDojo os redireciona para a página Alterar senha e não permite que eles vão a nenhum outro lugar até definirem sua própria senha. A flag de redefinição forçada é limpa automaticamente assim que isso acontece.
Se a sua instância tiver o fluxo “Esqueci minha senha” habilitado (DD_FORGOT_PASSWORD, ativado por padrão) e o e-mail configurado, os usuários podem, em vez disso, usar o link Esqueci minha senha na página de login depois que a conta tiver uma senha utilizável, e definir uma senha sem precisar da temporária.
Observações
- Kubernetes: execute o shell no pod do Django, por exemplo
kubectl exec -it deploy/defectdojo-django -c uwsgi -- ./manage.py shell(ajuste os nomes do deployment e do container para a sua versão). - Escolha uma senha temporária forte. Com
force_password_reset = Trueo usuário não pode mantê-la, então ela só precisa sobreviver a um login. - Mantenha pelo menos uma conta de administrador local funcionando para que você nunca fique bloqueado.