CAS
A autenticação na Intranet, é feita através do CAS (Central Authentication Service), em uma instalação que roda sobre o endereço https://cas.ufrj.br, e é administrado pela Equipe de Administração de Servidores (adm.servidores@tic.ufrj.br), mais especificamente pelo servidor Enoch Pimentel.
Como o CAS permite que sejam configurados vários backends de autenticação, na UFRJ o CAS aceita autenticação por LDAP ou por view no banco de dados SQL Server, embora a maior parte dos recursos seja destinados a pessoas autenticadas por uma view. Mais detalhes sobre essas views são explicados a seguir.
Views de Autenticação
Estas são as views utilizadas na autenticação via CAS. Todas elas ficam no banco de dados DBUFRJ.
DBUFRJ.dbo.view_login_cas
Esta é a view configurada no CAS como principal backend. Os campo utilizados para autenticação são IdentificacaoUFRJ (que é o CPF ou passaporte, utilizado como nome de usuário) e SenhaSHA, que é um hash SHA1 da senha do usuário. O CAS está ainda configurado para retornar ao cliente os campos Nome, Email e grupos, de onde são tirados dados para controle de permissões. O campo grupo é uma concatenação dos grupos aos quais o usuário pertence dentro dos sistemas corporativos, separados por dois pontos (“:”). Os grupos podem ser “aluno_grad” (aluno de graduação), “aluno_pos” (aluno de pós graduação), “docente”, “tec_admin” (técnico administrativo) ou outros grupos definidos no cadastro de acesso especial.
As senhas dos usuários, fornecidas por esta view, ficam armazenadas na tabela dbo.SenhaLDAP, do DBUFRJ. Segue abaixo o código desta view, extraído em 11/01/2016:
CREATE VIEW [dbo].[view_login_cas] AS SELECT DISTINCT P.Nome, P.Email, CASE WHEN VT.MatriculaSiape IS NOT NULL THEN VT.MatriculaSiape WHEN VP.MatriculaSiape IS NOT NULL THEN VP.MatriculaSiape END AS matricula_siape, CASE WHEN VAG.registroSIRA IS NOT NULL THEN VAG.registroSIRA WHEN VAP.registroSIRA IS NOT NULL THEN VAP.registroSIRA END AS registro_sira, SUBSTRING( CASE WHEN (VT.ativo IS NOT NULL) THEN ':tecnico_admin' ELSE '' END + CASE WHEN (VAG.ativo IS NOT NULL) THEN ':aluno_graduacao' ELSE '' END + CASE WHEN (VAP.ativo IS NOT NULL) THEN ':aluno_pos' ELSE '' END + CASE WHEN (VP.ativo IS NOT NULL) THEN ':docente' ELSE '' END + CASE WHEN (UE.grupos IS NOT NULL) THEN ':' + CONVERT(VARCHAR(100),UE.grupos) ELSE '' END , 2, 1024) AS grupos, VT.Ativo AS eh_tec_admin, VAG.ativo AS eh_aluno_grad, VAP.ativo AS eh_aluno_pos, VP.Ativo AS eh_professor, S.IdentificacaoUFRJ, S.SenhaSHA, S.SenhaSSHA, CASE WHEN 1 IN (VT.ativo, VAG.ativo, VAP.ativo, VP.ativo) THEN 1 ELSE 0 END AS ativo FROM dbo.SenhaLDAP AS S INNER JOIN dbo.Pessoa AS P ON P.IdentificacaoUFRJ = S.IdentificacaoUFRJ LEFT OUTER JOIN dbo.view_eh_tec_adm AS VT ON VT.IdentificacaoUFRJ = S.IdentificacaoUFRJ LEFT OUTER JOIN dbo.view_eh_aluno_grad AS VAG ON VAG.IdentificacaoUFRJ = S.IdentificacaoUFRJ LEFT OUTER JOIN dbo.view_eh_aluno_pos AS VAP ON VAP.IdentificacaoUFRJ = S.IdentificacaoUFRJ LEFT OUTER JOIN dbo.view_eh_professor AS VP ON VP.IdentificacaoUFRJ = S.IdentificacaoUFRJ LEFT JOIN IntranetUFRJ.dbo.UsuariosAcessoEspecial UE ON( UE.IdentificacaoUFRJ = P.IdentificacaoUFRJ AND ( ( UE.data_inicio IS NULL OR UE.data_inicio <= GETDATE() ) AND ( UE.data_fim IS NULL OR UE.data_fim >= GETDATE() ) ) )
A view_login_cas se utiliza de outras views que já eram utilizadas pela versão antiga da Intranet, que são a view_eh_professor, view_eh_aluno_grad, view_eh_aluno_pos e view_eh_tec_adm, melhor comentada a seguir.
DBUFRJ.dbo.view_eh_aluno_grad
Esta view é responsável por identificar os alunos matriculados em cursos de graduação. Segue abaixo o código da view, extraído em 12/01/2016:
CREATE VIEW [dbo].[view_eh_aluno_grad] AS SELECT pf.IdentificacaoUFRJ, a.matriculaDRE AS registroSIRA, CASE WHEN sm.codigo LIKE 'A%' THEN 1 ELSE 0 END AS ativo, c.nome, p.Email FROM Siga.dbo.Aluno AS a INNER JOIN Siga.dbo.Curso AS c ON c.curso_oid = a.curso_oid INNER JOIN dbo.PessoaFisica AS pf ON a.pessoaFisica_oid = pf.PessoaFisica_Oid INNER JOINdbo.Pessoa AS p ON p.Pessoa_oid = pf.pessoa_oid INNER JOIN Siga.dbo.TipoNivel AS tn ON a.tipoNivel_oid = tn.tipoNivel_oid INNER JOIN Siga.dbo.SituacaoMatricula AS sm ON a.situacaoMatricula_oid = sm.situacaoMatricula_oid (tn.codigo = '3') WHERE GO DBUFRJ.dbo.view_eh_aluno_pos Esta VIEW é responsável por identificar os alunos matriculados em cursos de pós-graduação. Segue abaixo o código da VIEW, extraído em 12/01/2016: CREATE VIEW [dbo].[view_eh_aluno_pos] AS SELECT pf.IdentificacaoUFRJ, a.matriculaDRE AS registroSIRA, CASE WHEN sm.codigo LIKE 'A%' THEN 1 ELSE 0 END AS ativo, c.nome, p.Email FROM Siga.dbo.Aluno AS a INNER JOIN Siga.dbo.Curso AS c ON c.curso_oid = a.curso_oid INNER JOIN dbo.PessoaFisica AS pf ON a.pessoaFisica_oid = pf.PessoaFisica_Oid INNER JOIN dbo.Pessoa AS p ON p.Pessoa_oid = pf.pessoa_oid INNER JOIN Siga.dbo.TipoNivel AS tn ON a.tipoNivel_oid = tn.tipoNivel_oid INNER JOIN Siga.dbo.SituacaoMatricula AS sm ON a.situacaoMatricula_oid = sm.situacaoMatricula_oid WHERE (tn.codigo <> '3') GO
DBUFRJ.dbo.view_eh_professor
Esta view é responsável por identificar os servidores docentes. Segue abaixo o código da view, extraído em 12/01/2016:
CREATE VIEW [dbo].[view_eh_professor] AS SELECT DISTINCT su.IdentificacaoUFRJ, su.MatriculaSiape, CASE (UltimoRegimeJuridico + UltimaSituacaoFuncional) WHEN 'EST01' THEN 1 WHEN 'EST02' THEN 0 ELSE 0 END AS Ativo, l.DescricaoLocal, p.Email FROM dbo.ServidorUfrj AS su INNER JOIN dbo.Local AS l ON l.CodigoLocal = su.UltimaLocalizacao AND l.AnoPagamento = YEAR(GETDATE()) AND l.MesPagamento = MONTH(GETDATE()) INNER JOIN dbo.Pessoa AS p ON p.IdentificacaoUFRJ = su.IdentificacaoUFRJ WHERE ( su.CodigoGrupo IN('705' , '706', '707') OR ( su.CodigoGrupo = '060' AND su.CodigoCargo IN('002','003') ) ) AND (su.ExclusaoData IS NULL) GO
DBUFRJ.dbo.view_eh_tec_adm
Esta view é responsável por identificar os servidores técnicos administrativos. Segue abaixo o código da view, extraído em 12/01/2016:
CREATE VIEW [dbo].[view_eh_tec_adm] AS SELECT DISTINCT su.IdentificacaoUFRJ, su.MatriculaSiape, CASE (su.UltimoRegimeJuridico + su.UltimaSituacaoFuncional) WHEN 'EST01' THEN 1 WHEN 'EST08' THEN 1 WHEN 'EST02' THEN 0 ELSE 0 END AS Ativo, l.DescricaoLocal, p.Email FROM dbo.ServidorUfrj AS su INNER JOIN dbo.Local AS l ON l.CodigoLocal = su.UltimaLocalizacao AND l.AnoPagamento = YEAR(GETDATE()) AND l.MesPagamento = MONTH(GETDATE()) INNE dbo.Pessoa AS p ON p.IdentificacaoUFRJ = su.IdentificacaoUFRJ WHERE su.CodigoGrupo = '701' AND (su.ExclusaoData IS NULL) GO
Acesso Especial
Além das views legadas, a estrutura da Intranet permite ainda incluir manualmente mais grupos a serem retornados pela view_login_cas. Para fazê-lo, basta incluir um registro por pessoa na tabela dbo.UsuariosAcessoEspecial, que fica no banco de dados IntranetUFRJ. Os campos devem ser preenchidos da seguinte forma:
- IdentificacaoUFRJ - CPF (ou passaporte iniciado pela letra “E”) do usuário;
- grupos - Grupos adicionais para o usuário, separados por dois pontos (“:”);
- data_inicio (opcional) - Data de início da validade dos grupos para o usuário;
- data_fim (opcional) - Data fim da validade dos grupos para o usuário;
- obs - Observações. É importante preencher este campo para explicar o que motivou a inclusão manual do(s) grupo(s).
Todos os usuários incluídos nesta tabela ganham todos os acessos garantidos para os grupos definidos, sendo eles repassados pelo CAS. Esse acesso também fica restrito aos períodos compreendidos entre as datas definidas entre os campos data_incio e data_fim. Se um ou nenhum dos campos for preenchido, será considerado que o acesso não terá limite para início e/ou fim.