Reconhecimento de Origem de Acesso
27/11/2012 18:36
0
OI pessoal tudo bem?

Tenho uma aplicação que estamos em produção em nossa intranet. Surgiu a necessidade de liberarmos acesso a nossos parceiros pela Internet e preciso restringir algumas informações internas. O problema é que não sei como identificar o acesso que vem de minha intranet do acesso que vem da Internet.

Após o login eu consigo separá-los pelo plugin do spring security core, porém tem uma parte que é publica (relação com investidores) e que não precisa de login. Se eu colocar o login nessa parte pública inviabiliza o projeto.

Assim preciso saber identificar o acesso interno do externo antes do login. Alguém saberia me ajudar a separar estes 2 tipos de acesso.
Tags: log controle de acesso


1
Boa tarde Ovidio.

Cara, sabendo que é uma intranet, você conhece sua rede local, correto? Você poderia verificar em seu controlador a origem através do IP. É uma idéia, mas pode dar certo!

Use o request.getRemoteAddr() para descobrir o IP do usuário, ai vc trata de acordo com suas necessidades.

[]'s
27/11/2012 19:29


1
Oi Ovídio,

razoávelmente simples. Se é interno, normalmente o IP vai começar com 10.(alguma coisa).


0
Isso mesmo, você vai conhecer sua rede interna pela classe e pela subrede que ela estiver. Conhecendo isso basta tratar IP's com este início conforme o kiko falou... Poder ser 10. ou 192... Depende de como sua rede está configurada.

[]'s
28/11/2012 10:58


2
Ovidio, não trave por ip, se em um futuro o admin de redes mudar, ai você perdeu tempo no seu projeto.

Eu tenho uma situação semelhante.

Meu projeto tem uma área pública, uma interna e uma externa, identificados assim:

pública: Clientes, parceiros ou qualquer um que não tem um login.
interna: Funcionários da empresa com login.
externa: Parceiros da empresa com login.

Então, a parte pública é livre de autenticação, sendo assim, não preciso me preocupar.
Nesta parte, tem o form de login, e aqui acontece minha divisão.
Quando o cara loga, eu vejo se ele é interno ou externo pelo login, ou seja, no cadastro do usuário, tenho um campo (tipo char(1), ou em java String tipo) que me diz o que o cara é.
Ai de acordo com o tipo, eu direciono ele para uma parte do sistema.

Inclusive nesse mesmo sistema, havia um módulo de callcenter, e com isso, eu criei mais um tipo. No momento do login, fico mais ou menos assim:

def u = Usuario.findBy....


if (u!=null){
if (u.tipo.equals("FC"){
redirect ....
}else if (u.tipo.equals("AC")){
redirect...
}else{...}
}


simples assim.

28/11/2012 11:20


0
Concordo com o Carlos.
28/11/2012 11:30


1
Carlos, muito boa esta!

Mas sabe o que ocorre também? Casos mistos.
Há situações nas quais você vai aplicar a regra por usuário, porém quer que o usuário, fora da empresa, não tenha acesso a determinada parte do seu sistema. Quando eu trabalhava com engenharia isto era muito comum pra evitar, por exemplo, que o usuário saísse da máquina e outro visse conteúdo privado.

A solução ideal a meu ver é você mesclar a solução do Carlos com uma lista de IPs (de preferÊncia prefixos). Assim você consegue fazer um trem muito, muito massa.


0
Nossa pessoal muito legal suas explicações! Obrigado pela resposta amigos.

Estão me ajudando demais.

A ideia do Carlos é muito boa, mas não sei se seria a ideal para mim vou explicar o porquê:

Em minha página pública, a mesma página será visitada tanto pelo público interno, quanto pelo externo (parceiros/acionistas). As informações serão filtradas de acordo com o público, mesmo antes do login. Se for externo, não irá apresentar informações sigilosas, mas se for interno, não haverá filtragem e liberará todas as informações. O login serve para filtrar estas informações.

Quando a pessoa fizer o login, o exemplo do Carlos será perfeito, mas eu tenho que ter um tratamento antes da pessoa logar para filtrar as informações. Pelo que entendi a filtragem pelo IP seria a mais adequada uma vez permitia a implantação do filtro antes do login. O que vocês acham?
28/11/2012 12:35


0
Conforme o kiko ressaltou... essa solução do Carlos atribui a escolha ao usuário logado, e não a origem do login.

Se você quer restringir o acesso quanto a origem, a meu ver a forma mais prática seria por IP mesmo. Para contornar o problema caso futuramente a rede mude, você poderia criar um arquivo contendo o início do IP da sua rede, e caso um dia mude... basta modificar o arquivo, o sistema não precisará ser recompilado.

Por exemplo digamos que em sua rede as máquinas possuam IP na classe 192.168.0.XXX, crie um arquivo contendo o início e armazene junto ao projeto, em seu controlador ou serviço faça a leitura do arquivo e a compare-a com o IP do usuário. Caso mude a rede, basta editar o arquivo. =]
Você pode até mesmo salvar isso no banco e criar um ambiente onde usuários privilegiados possam alterá-lo.

[]'s
28/11/2012 13:44



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto