Webservice - Autenticação JSON

Estou com algumas dúvidas de como autenticar meu Webservice RESTFul JSON (php) e gostaria da orientação dos colegas para esclarece-las.

Dúvidas:

  1. Como devo proceder para autenticar o usuário (app client) no meu Webservice e só depois de autenticado retornar/devolver o JSON referente a sua requisição?

  2. Fica errado ou não seria uma “boa prática” se eu tiver um “script” só pra autenticação que após a verificação do usuário o mesmo retorne “true” ou “false” para o usuário (app client) e daí em seguida em caso de “true” o usuário (app client) faria a nova requisição referente ao que o mesmo necessita?

  3. No caso deu deixar a autentição do usuário no próprio “script” que retornar/devolve o JSON teria algum tipo que vantagem? Ou tanta faz deixando junto ou separado levando em conta a questão do desempennho?

Na app client só uso a class HTTPCLIENT e nada além disso. No Webservice também não uso nada além da própra class JSON do PHP.

Grato a todos e aguardo qualquer orientação.

Também tenho esta dúvida, mas pelo que eu tenho visto a auth e autorização tem que ser feita a cada request que o cliente faz ao servidor, aconselho você a colocar user/pwd no header do httpS ou usar OAuth/OpenId e etc…

Normalmente eu verifico se o usuário e senha estão corretos, e caso seja sim, retorno um “true”…
Ai realizo uma nova request para buscar o que preciso. Não sei se seria a melhor maneira.

A cada requisição eu envio um password junto no qual comparo no ws. Se alguém fizer de uma maneira melhor e poder expor pra galera discutir, seria uma boa =]

[quote]Normalmente eu verifico se o usuário e senha estão corretos, e caso seja sim, retorno um “true”…
Ai realizo uma nova request para buscar o que preciso. Não sei se seria a melhor maneira.[/quote]

Eu particularmente não acho uma boa pq vc acaba fazendo 2 requests…

aprendiz_ce, não sei se contempla no seu caso, mas eu acho que você poderia ver como o google faz… ele passa uma chave de auth/autorização para você consumir recursos rest

[quote=aprendiz_ce]Estou com algumas dúvidas de como autenticar meu Webservice RESTFul JSON (php) e gostaria da orientação dos colegas para esclarece-las.

Dúvidas:

  1. Como devo proceder para autenticar o usuário (app client) no meu Webservice e só depois de autenticado retornar/devolver o JSON referente a sua requisição?

  2. Fica errado ou não seria uma “boa prática” se eu tiver um “script” só pra autenticação que após a verificação do usuário o mesmo retorne “true” ou “false” para o usuário (app client) e daí em seguida em caso de “true” o usuário (app client) faria a nova requisição referente ao que o mesmo necessita?

  3. No caso deu deixar a autentição do usuário no próprio “script” que retornar/devolve o JSON teria algum tipo que vantagem? Ou tanta faz deixando junto ou separado levando em conta a questão do desempennho?

Na app client só uso a class HTTPCLIENT e nada além disso. No Webservice também não uso nada além da própra class JSON do PHP.

Grato a todos e aguardo qualquer orientação.
[/quote]

Amigo, tem uma dúvida conceitual séria, aqui: a autenticação/autorização e a requisição de dados não são feitas de forma separada. Em geral, numa autenticação HTTP/HTTPS, você faz a requisição e envia os cabeçalhos de autenticação/autorização para essa requisição.

Então, na verdade, para todas as suas perguntas a resposta é a mesma: faça a requisição normalmente enviando os dados do usuário autorizado para tal.

[]'s

O ideal é que as credenciais do usuário seja adicionado a cada requisição.

Eu tive a pouco tempo um problema quanto a autorização de webservices. Existem algumas alternativas, porém, eu preferi adotar, devido a meus requisitos, a criação de um proxy que, a cada chamada de serviço, adiciona no header da requisição as credenciais do usuário e no server, eu valido se as credenciais estão corretas e se este serviço pode ser acessado por este usuário.

Fiz isso usando aspecto na aplicação web (interceptando tudo que for @Webservice).

[quote=Alexandre Saudate][quote=aprendiz_ce]Estou com algumas dúvidas de como autenticar meu Webservice RESTFul JSON (php) e gostaria da orientação dos colegas para esclarece-las.

Dúvidas:

  1. Como devo proceder para autenticar o usuário (app client) no meu Webservice e só depois de autenticado retornar/devolver o JSON referente a sua requisição?

  2. Fica errado ou não seria uma “boa prática” se eu tiver um “script” só pra autenticação que após a verificação do usuário o mesmo retorne “true” ou “false” para o usuário (app client) e daí em seguida em caso de “true” o usuário (app client) faria a nova requisição referente ao que o mesmo necessita?

  3. No caso deu deixar a autentição do usuário no próprio “script” que retornar/devolve o JSON teria algum tipo que vantagem? Ou tanta faz deixando junto ou separado levando em conta a questão do desempennho?

Na app client só uso a class HTTPCLIENT e nada além disso. No Webservice também não uso nada além da própra class JSON do PHP.

Grato a todos e aguardo qualquer orientação.
[/quote]

Amigo, tem uma dúvida conceitual séria, aqui: a autenticação/autorização e a requisição de dados não são feitas de forma separada. Em geral, numa autenticação HTTP/HTTPS, você faz a requisição e envia os cabeçalhos de autenticação/autorização para essa requisição.

Então, na verdade, para todas as suas perguntas a resposta é a mesma: faça a requisição normalmente enviando os dados do usuário autorizado para tal.

[]'s[/quote]

Olá,

Compartilho do seu conceito plenamente, pois é como eu tenho visto por aí… e sem falar que no meu caso o aplicativo/webservice vai validar o DISPOSITIVO, depois o USUARIO/SENHA e para tão somente retorno o JSON. Nesse caso seriam 3 requests e que na minha “santa ignorância” seria de um certa for errado, isso levando em conta os recurso do dispositivo móvel e também a própria barda de internet móvel.

Então, como devo fazer para que em uma só requisição eu posso tratar essas três condições que necessito? Atualmente, caso o DISPOSITIO e o USUARIO/SENHA não seja validos o JSON é “null”, daí o usuário não é alertado o porque é o retorno foi “null”. Gostaria de informar tudo ao usuário, tipo: TIMEOUT, DISPOSITIVO NÃO AUTORIZADO, USUARIO INVALIDO, SENHA INVALIDA para que tudo ficasse bem claro para o usuário.

Grato pela sua valiosa atenção e aguardo pela sua comentário.

Pois é, esse dúvida me persegue faz tempo e chego o momento de resolver isso!

Você teria algum link, tutorial ou exemplo que eu pudesse dar um olhada e ver como ficaria a coisa mendiante a sua recomendação?

Grato pela sua atenção.

[quote=jhony_ld]Normalmente eu verifico se o usuário e senha estão corretos, e caso seja sim, retorno um “true”…
Ai realizo uma nova request para buscar o que preciso. Não sei se seria a melhor maneira.[/quote]

Pra mim é correto, mas a questão de duas requisições é que não me deixa CONFORTAVEL.

Grato pelo seu comentário.

[quote=aprendiz_ce][quote=Alexandre Saudate][quote=aprendiz_ce]Estou com algumas dúvidas de como autenticar meu Webservice RESTFul JSON (php) e gostaria da orientação dos colegas para esclarece-las.

Dúvidas:

  1. Como devo proceder para autenticar o usuário (app client) no meu Webservice e só depois de autenticado retornar/devolver o JSON referente a sua requisição?

  2. Fica errado ou não seria uma “boa prática” se eu tiver um “script” só pra autenticação que após a verificação do usuário o mesmo retorne “true” ou “false” para o usuário (app client) e daí em seguida em caso de “true” o usuário (app client) faria a nova requisição referente ao que o mesmo necessita?

  3. No caso deu deixar a autentição do usuário no próprio “script” que retornar/devolve o JSON teria algum tipo que vantagem? Ou tanta faz deixando junto ou separado levando em conta a questão do desempennho?

Na app client só uso a class HTTPCLIENT e nada além disso. No Webservice também não uso nada além da própra class JSON do PHP.

Grato a todos e aguardo qualquer orientação.
[/quote]

Amigo, tem uma dúvida conceitual séria, aqui: a autenticação/autorização e a requisição de dados não são feitas de forma separada. Em geral, numa autenticação HTTP/HTTPS, você faz a requisição e envia os cabeçalhos de autenticação/autorização para essa requisição.

Então, na verdade, para todas as suas perguntas a resposta é a mesma: faça a requisição normalmente enviando os dados do usuário autorizado para tal.

[]'s[/quote]

Olá,

Compartilho do seu conceito plenamente, pois é como eu tenho visto por aí… e sem falar que no meu caso o aplicativo/webservice vai validar o DISPOSITIVO, depois o USUARIO/SENHA e para tão somente retorno o JSON. Nesse caso seriam 3 requests e que na minha “santa ignorância” seria de um certa for errado, isso levando em conta os recurso do dispositivo móvel e também a própria barda de internet móvel.

Então, como devo fazer para que em uma só requisição eu posso tratar essas três condições que necessito? Atualmente, caso o DISPOSITIO e o USUARIO/SENHA não seja validos o JSON é “null”, daí o usuário não é alertado o porque é o retorno foi “null”. Gostaria de informar tudo ao usuário, tipo: TIMEOUT, DISPOSITIVO NÃO AUTORIZADO, USUARIO INVALIDO, SENHA INVALIDA para que tudo ficasse bem claro para o usuário.

Grato pela sua valiosa atenção e aguardo pela sua comentário.
[/quote]

Neste caso, o ideal é o usar o padrão: toda requisição feita vai enviar como cabeçalho o dispositivo (o cabeçalho é o User-Agent). Ou seja, você ainda pode fazer a autorização baseado nisso. Se algum dado não bater, você retorna um código de status 401 ou 403 (respectivamente: problema de autenticação e de autorização), e no corpo da resposta você detalha com a mensagem dizendo se não foi autorizado pelo usuário, pelo dispositivo ou o quê.

Quanto ao User-Agent, vale lembrar que, caso esse cabeçalho não seja suficiente pra você, sempre é possível adicionar novos cabeçalhos customizados. O HTTP é suficientemente flexível para comportar esse tipo de situação.

[]'s

[quote=ivandasilva][quote]Normalmente eu verifico se o usuário e senha estão corretos, e caso seja sim, retorno um “true”…
Ai realizo uma nova request para buscar o que preciso. Não sei se seria a melhor maneira.[/quote]

Eu particularmente não acho uma boa pq vc acaba fazendo 2 requests…

aprendiz_ce, não sei se contempla no seu caso, mas eu acho que você poderia ver como o google faz… ele passa uma chave de auth/autorização para você consumir recursos rest[/quote]

Como faço para ter essa informação?

[quote=marciobarroso]O ideal é que as credenciais do usuário seja adicionado a cada requisição.

Eu tive a pouco tempo um problema quanto a autorização de webservices. Existem algumas alternativas, porém, eu preferi adotar, devido a meus requisitos, a criação de um proxy que, a cada chamada de serviço, adiciona no header da requisição as credenciais do usuário e no server, eu valido se as credenciais estão corretas e se este serviço pode ser acessado por este usuário.

Fiz isso usando aspecto na aplicação web (interceptando tudo que for @Webservice).[/quote]

Eu já pensei nessa questão das “credencias”… mas com devo implementar isso?

Como o meu Webservice é RestFUL JSON (PHP) em uma coisinha chamada TOKEN, mas não sei se seria a mesma coisa que você recomenda.

Se puder me passar algum link, tutorial ou exemplos me ajudaria muito.

Grato pela sua atenção.

Tenta usar a Calendar API por exemplo para você ver como o google trabalha, para isso acesse
https://code.google.com/apis/

[quote=ivandasilva]Tenta usar a Calendar API por exemplo para você ver como o google trabalha, para isso acesse
https://code.google.com/apis/[/quote]

Vou dar uma olhadinha!

Grato.