On 3/1/15 9:51 PM, Eduardo Verissimo wrote:
Eu fiquei com um pouco de dúvidas a respeito da última frase, "não
parece haver motivo para que uma sessão de usuário seja um objeto
restful".
Então, deixe-me ver se entendi: o usuário faz login e é criada uma
sessão para que o servidor saiba quem está na outra ponta da conexão.
As requisições, então, através do cookie, passam a identidade do
usuário, que é obtida da sessão que é guardada no servidor.
Não, não e não ..... =)
Primeiro: não há controle de sessão, não no servidor.
Segundo: A manipulação de cookies em requisições CORS é algo bem chato
quando e abre o leque de browsers que irão ser usados (espero que sua
API suporte clients JS). O uso de cookie é completamente desnecessário.
Terceiro: cada requisição REST envia ao servidor todas as informções
necessárias para que tal ação seja processada. Não há uma necessidade de
se realizar autenticação em cada requisição. O que muito se vê é o
seguinte: O user autentica o client uma primeira vez e recebe um token
para as consecutivas requisições feita á API. Tokens expiram. É lógico
que você pode definir a vida útil deles de acordo com sua necessidade. É
uma boa prática, no ato da autenticação, notificar seu client sobre
quando o token irá expirar, isso por exemplo, permitirá o end user,
saber quando é necessário autenticar a app novamente.
Eu acho que ele quiz dizer que não há razões para se ter sessões de
usuário ...
Eu estou lendo uma explicação, na Wikipedia, do aspecto /stateless /do
REST: "The client–server communication is further constrained by no
client context being stored on the server between requests. Each
request from any client contains all the information necessary to
service the request, and session state is held in the client. The
session state can be transferred by the server to another service such
as a database to maintain a persistent state for a period and allow
authentication."
Então guardar dados do usuário em uma sessão no servidor não quebra o
stateless? Eu imaginava que sim, pois uma parte dos dados que o
servidor usaria para fazer o processamento já estaria disponível
localmente, e não seria necessário retirar essas informações do request.
Por outro lado, eu poderia considerar que o id da sessão que vem com o
cookie seria a mesma coisa que passar usuário e senha todas as vezes
em que for requisitada a informação. Imagino que seja isso que você
está afirmando, não?
Obrigado!
Em 27 de fevereiro de 2015 19:17, Leonardo Ruoso <[email protected]
<mailto:[email protected]>> escreveu:
Eu não quis responder da primeira vez sem reler e confirmar a
questão e ver se alguém relevante tinha escrito algo contrário,
mas fato é que autenticação e autorização são questões ortogonais
ao resto, tanto é que fazem parte da coreografia de acesso às
páginas web, conteúdo restful, desde sempre.
O que não deve rolar numa requisição rest? Elementos de
autenticação não devem integrar path ou quest.
O que seria ideal? Que o mecanismo fosse suportado pelo maior
número de clientes e que possa ser integrado a mecanismos de
autenticação existentes, o mundo enterprise exige isso, mas o
consumer lida melhor com oauth2.
De qualquer forma, o que vale explicar, é que a autenticação não é
parte de um recurso, é ortogonal a ele, e não parece haver motivo
para que uma sessão de usuário seja um objeto restful. É um caso
patente de RPC.
Em 27/02/2015 06:55, "Leonardo Ruoso" <[email protected]
<mailto:[email protected]>> escreveu:
Eu preciso estudar melhor para lhe prover uma resposta
adequada, mas a identificação do usuário, seja mantida através
de cookie, seja de certificados, parece-me ortogonal ao recurso.
Em 26/02/2015 22:59, "Eduardo Verissimo" <[email protected]
<mailto:[email protected]>> escreveu:
Leonardo, eu costumo usar o Store:DBIx::Class com
Catalyst. Mas junto uso o Session::State::Cookie, e uso de
uma maneira que me parece inadequada se quiser
conformidade com REST. Justamente por causa do "Session".
O que eu gostaria de fazer neste momento é, durante a
autenticação, gerar um par de chaves, mandar a pública
para o cliente e então receber a informação de
identificação criptografada, evitando assim guardar
informações em sessões no servidor com os dados do
usuário. Eu não sei se é a melhor forma de fazer isso, e
posso estar falando besteira.
Renato, estou dando uma olhada em seu código. Eu escrevi
um código para fazer login com Facebook, mas acho que seu
código está bem melhor implementado que o meu. Há uma
diferença, particularmente: eu gravo as informações do
usuário em uma sessão, e acho que isso faz com que haja
alguma vantagem no tempo de acesso. Mas isso não é REST,
então não vem ao caso.
Outra coisa: acho que também vale a pena criar algum tipo
de cache para acelerar a obtenção dos dados do usuário no
servidor. Me parece fazer sentido, mas ainda preciso
investigar mais essa ideia.
Obrigado pela força!
Eduardo Veríssimo
Em 26 de fevereiro de 2015 20:25, Leonardo Ruoso
<[email protected] <mailto:[email protected]>> escreveu:
Autenticação Rest é Autenticação Web, simples assim.
Se é algo «crítico»: OpenLDAP+Kerberos ou ApacheDS.
Tente adotar um esquema de ampla utilização, assim a
maioria dos softwares a serem integrados terão suporte
nativo/plugin disponível.
Se é algo «não crítico»:
Catalyst::Plugin::Authentication … Store::DBix::Class.
É o mais comum, que está disponível no tutorial do
Catalyst. Catalyst::Tutorial::Manual
Em 25 de fevereiro de 2015 20:40, Eduardo Verissimo
<[email protected] <mailto:[email protected]>>
escreveu:
Olá, pessoal!
De que maneira vocês estão tratando autenticação
de aplicações REST? Estou procurando alguma coisa
pronta para Catalyst, e não encontrei nada pronto.
Obrigado!
Eduardo Veríssimo
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
SaoPaulo-pm mailing list: [email protected]
<mailto:[email protected]>
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer
--
Leonardo Ruoso
Journalist, Perl developer and business consultant
Media, UFC/2006; Telecom, IFCE/1998
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
SaoPaulo-pm mailing list: [email protected]
<mailto:[email protected]>
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
SaoPaulo-pm mailing list: [email protected]
<mailto:[email protected]>
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
SaoPaulo-pm mailing list: [email protected]
<mailto:[email protected]>
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
SaoPaulo-pm mailing list: [email protected]
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer
--
Eduardo Almeida - Software Engineer
[email protected] - 27 3261-0082 / 27 9839 3755
*WEB2 Solutions* - Inovando, sempre!
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
SaoPaulo-pm mailing list: [email protected]
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer