Pergunta

Eu estou procurando um protocolo para garantir uma conexão entre um dispositivo móvel e um serviço web. Eu quero garantir que apenas o dispositivo móvel pode executar ações sobre o serviço web e vice-versa. Os dados não precisam ser criptografados.

Eu sei Oauth, mas parece que é mais usado para conexões seguras quando você tem 3 entidades diferentes (Server, do Consumidor e de Autenticação). Aqui, o consumidor eo usuário seria a mesma pessoa.

Existe um protocolo simples de fazer isso (sem exigir que o usuário de login e, em seguida, autorizar o token de acesso como é o caso para Oauth)?

Eu preciso usá-lo em diferentes plateforms, então as necessidades de protocolo para estar disponível, pelo menos no iPhone e PHP.

Foi útil?

Solução 2

Eu encontrei uma solução:. Use um protocolo "2 Oauth patas"

Desta forma, eu manter o padrão, eu não tenho a roda reinventar e eu tenho uma solução segura.

Como o consumidor eo usuário são as mesmas para mim, eu simplesmente autorizar automaticamente "solicitação de tokens" que o consumidor está pedindo quando vejo que o consumidor é registrado como o usuário!

O que estou fazendo é:

  • Em SSL: I o login como o usuário e solicitar uma chave de consumidor / segredo para o servidor
  • O servidor devolva minha chave do consumidor / secret
  • Em SSL: login I como o usuário e solicitar uma "solicitação de token" com a minha chave do consumidor / secret
  • O servidor reconhecer que eu sou o usuário para que ele automaticamente autorizar a solicitação de token
  • Sem SSL: Peço um "acesso token" com o meu "solicitação de token"
  • O servidor me dar o meu acesso token de volta
  • eu usá-lo para realizar pedidos de forma segura

Outras dicas

Você vai precisar para esclarecer o que você quer dizer com 'seguro'. Garantir contra o que exatamente? O que você está preocupado?

Dito isso, https (http sobre SSL) é um bom ponto de partida, isso permitirá que você para autenticar o site para o dispositivo (ou navegador) e é onipresente.

Se você deseja autenticar o dispositivo, que é um pouco mais complicado. Você pode gerar e armazenar um segredo compartilhado (um número aleatório) e quando a primeira conexão com o site, prever que, no GET / POST .... há muitas variações sobre isso, mas os simples todos derivam de estabelecer um segredo compartilhado e qualquer outra coisa é provavelmente um exagero. Isso permitirá que você reconhecer que o mesmo dispositivo está a ligar novamente na próxima vez que se conectar. Pense nisso como uma senha para o dispositivo para iniciar sessão com (no entanto, não precisa ser uma palavra, e provavelmente não deve ser).

A dificuldade com isto é que se o programa é excluído que o segredo será perdido, e dependendo do que você quer fazer exatamente, isso pode ser um problema, pois na próxima vez que o programa é executado no mesmo dispositivo você vai necessidade de estabelecer um novo segredo. Nesse caso, você não terá nenhuma maneira de saber que o dispositivo de conexão desta vez é o mesmo que aquele que ligava antes. Se você precisa disso, você precisará usar algum tipo de mecanismo de reset, que é difícil de fazer, e equivale a autenticação de um usuário, em vez de um dispositivo.

Note, iphones ter um identificador único, mas isso não é realmente um segredo e desde que realmente não fornecer qualquer prova de que um determinado dispositivo está se conectando. Não é nenhum dano para fornecê-la também, mas é mais como uma afirmação 'eu sou foo dispositivo', em vez de uma prova de identidade. Pense nisso como a parte nome de usuário de um login -. Você ainda precisa de algum segredo compartilhado

Você provavelmente poderia rolar o seu próprio com um segredo / one-way criptografia hash compartilhada através de uma conexão HTTPS.

Então, se você quer ter certeza de que é apenas um dispositivo em particular, fazer um hash da ID de dispositivo + timestamp + o segredo compartilhado no dispositivo, passá-lo como um parâmetro para o servidor e verificar o hash sobre o PHP lado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top