Eu construí um ponto de acesso para o site aqui que é usado de forma semelhante, o usuário recebe o ticket, o ticket tem nome de usuário e senha, que é válido por algumas horas.
Aqui eu usei o RADIUS como o backend de autenticação, então os nomes de usuários são programaticamente adicionados e removidos do banco de dados do usuário RADIUS (que pode ser LDAP, um RDB, arquivo simples).
Como você sugere, usei o PfSense, pois ele tem um portal cativo integrado que pode ser autenticado contra o RADIUS como um recurso padrão. Usar o portal cativo significa que o sistema sem fio pode ser aberto para facilitar a conexão, mas você ainda pode controlar o acesso.
Editar: o processo aqui é:
- Staff gera ticket via página da web (PHP)
- Webserver insere usuários no LDAP (PHP + OpenLDAP)
- Registros do usuário no portal cativo (PfSense + FreeRADIUS)
- O RADIUS autentica o usuário em relação ao LDAP (OpenLDAP + FreeRADIUS)