Técnicas de autenticação de API da Web


26

Temos uma estrutura de serviço da web asp.net MVC para servir xml / json para povos. Obtenha solicitações, mas está lutando para descobrir a melhor maneira (rápida, fácil e trivial para usuários que codificam com linguagens javascript ou OO) para autenticar usuários. Não é que nossos dados sejam confidenciais ou algo assim, apenas queremos que os usuários se registrem para que possamos ter seu endereço de e-mail para notificá-los sobre alterações e rastrear o uso.

Em nossa tentativa anterior, tínhamos o nome de usuário no URI e apenas garantíamos que o nome de usuário existisse e aumentássemos as tabelas db com o uso. Isso foi super básico, mas notamos pessoas usando a demo como nome de usuário etc. Por isso, precisamos que ela seja um pouco mais sofisticada.

Quais técnicas de autenticação estão disponíveis? O que os principais players usam / fazem.


O que você considera um "jogador importante"? Por favor, liste alguns exemplos. Enquanto você está nisso, inclua um link para as definições da API "player principal" para que possamos ver o que eles fazem.
S.Lott 12/01

eu consideraria o twitter / facebook / google / flicker os principais players. Os desenvolvedores.facebook.com apiwiki.twitter.com
Steve

Respostas:


10

Fiz essa pergunta no StackOverflow e você pode lê-la aqui . Veja também minha resposta para minha própria pergunta. Trata-se de autenticação precisamente sem precisar passar a senha para cada solicitação e sem SSL ou criptografia. Apenas hash simples.


Não tenho certeza se gosto da sua solução.
Steve Steve

Steve: use a solução Flickr

existe uma solução de cintilação de código aberto ou eu só preciso ler a API e descobrir?
Steve Steve

Leia a API deles, é muito simples. Não é tão seguro quanto o meu método, se você não possui SSL, mas é muito bom

Sua solução md5 simplesmente não parece ser adequada para "trivial para usuários de javascript". Vou ter que verificar a API do flickr um pouco mais. Olhei para ele, mas preciso estudar algumas das terminologias. Principalmente o que são sapos.
Steve

3

Este vídeo é uma maneira interessante de usar uma chave de API com seu serviço WCF / REST. código .


Essa é a mesma idéia que colocar o nome de usuário no serviço, exceto que eles estão chamando de chave API. Alguém pode olhar para a fonte da página em javascript e copiar a chave e usá-la em outro lugar. Deseja que uma chave API seja vinculada a um domínio de chamada, para que a chave API seja válida e venha de xyz.com?
Steve

isso também é uma duplicata do que o @KinGBin sugeriu?
Steve

0

Acho que você está usando o visual studio. Se você estiver usando a estrutura do vs 2010 com 4.0, consulte o modelo "Serviço REST WCF com verificação de chave da API" no vs 2010.


1
Vou ter que dar uma olhada nisso. Eu gostaria de me afastar do WCF, embora pessoalmente.
Steve Steve

Isso foi interessante, mas parece que apenas passa a APIKey na string de consulta. Isso não significa que a chave da API esteja visível para qualquer pessoa entre o chamador e o chamado - mesmo se você usar SSL?
JMarsch

0

Eu sempre uso autenticação HTTP para serviços web. A autenticação em si seria tratada pelo seu servidor web, provavelmente IIS no seu caso. Você configuraria o IIS para se autenticar no banco de dados, em um repositório LDAP ou similar.

Você acessaria o nome de usuário através da propriedade User.Identity.Name

EDIT : Exemplo de autenticação JQuery:

/* I found that providing the username and password both in the
   the arguments and in the url parameter seems to have better compatibility,
   if it works well for you, it is highly advisable to remove the 
   user/pass from the url */

function doLogin (){
  $.ajax({
    username: $('#username').val(),
    password: $('#password').val(),
    url: 'https://'+$('#username').val()+':'+$('#password').val()+'@api.example.com',
    dataType: 'jsonp',
    context: $('#result'),
    success: function(d) { $(this).html(d); $(location).attr('href','https://api.example.com/success'); }
    });
    return false;
}

como você faria isso com um cliente javascript?
Steve Steve

cliente = novo XMLHttpRequest (); client.open (método, url, assíncrono, usuário, senha);
ewindisch

Exemplo jquery adicionado à resposta
ewindisch 13/01

1
portanto, a combinação de senha de nome de usuário teria que residir em texto sem formatação na fonte. não parece uma boa ideia.
Steve Steve

1
ok, então basicamente você teria que digitar seu nome de usuário / senha em uma tela de login para disparar uma solicitação de API? Essa solução é terrível. Todo usuário de um site público teria que ser registrado?
Steve Steve
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.