Pergunta

Eu tenho um asp.net aplicativo web no qual eu uso vários nós de serviços para servir em várias requisições ajax.O problema é como determinar se a chamada correspondente, vem a página que eu tenho servido.Eu utilizar a autenticação de formulários em minhas páginas.Existe alguma maneira em que eu possa autorizar o usuário chamar a weservice através do mesmo autenticação de formulários.

Foi útil?

Solução

Ótima pergunta, sem dúvida!

Isso me lembra um velha pergunta que eu já respondeu a.Seu cenário é diferente, mas a raiz do problema continua o mesmo:se você chamar um serviço da web a partir de um Formulário da Web, como compartilhar dados de autenticação com o formulário?

Não é simples e feche o formulário solução para isso.Você pode pensar em implementar a especificação WS-Security para o Serviço da Web, e tem o Formulário Da Web autenticar-se contra o Serviço de Web depois de verificar que o usuário está autorizado.

O Serviço da Web não compartilha informações sobre o login do usuário, a menos que explicitamente passado como parâmetro para o método (ie. void PerformAction(string userId, ...)), mas lembre-se que, neste caso, a perspectiva muda drasticamente.

Esta é a melhor idéia que vem na minha mente, no entanto, tenha em mente que você profundamente redesenho de seu serviço da web ou você não deixar o usuário geradas clientes (ie.aplicativos de área de trabalho compiladas com o WSDL) para usar o seu serviço.

[Adicionar] agora que você explicou o cenário um pouco mais detalhado, aqui vem a parte interessante da engenharia de software :)

Como eu disse no meu comentário, você tem várias opções, por exemplo:

  1. Armazenar o nome de utilizador/palavra-passe na página de marcação de (em Javascript as variáveis) e tem JQuery enviá-los como um parâmetro para o serviço da web.WS, em seguida, irá autenticar o pedido baseando-se nos dados.Não recomendada, porque se alguém pode acessar o cache de usuário, a senha é explorada (há meio mais simples roubou de alguém senha em um shared/computador público, eu não discuti-los), e também porque se você planeja mudar de planície de HTTP para HTTPS para garantir a autenticação, em seguida, você deve seguro o serviço da web também
  2. Tem aplicação web gerar uma autenticação token o que é válido para o serviço da web.A ideia soa como este:primeiro, ter um objeto compartilhado entre a aplicação e o serviço de web (como se fosse um objeto dentro Application coleção) ou, se webapp e o serviço da web estão em servidores diferentes, usar um SGBD;em seguida, para cada aplicação bem sucedida de autenticação, gerar um token único (ID de sessão pode ser fino) e armazená-lo em um JS variável que será passado para o serviço web;finalmente, quando o serviço da web é chamado, verifique que o objeto compartilhado que o token é válido (ou seja,.o usuário é autenticado e ainda fez, com permissão para acessar o serviço da web, de modo a autenticação e a a autorização), caso contrário, rejeitar

Se outros caras tem ideias, não hesite em ajudar ;)

Outras dicas

Como você está fazendo a autenticação dos fóruns, você pode fazer algo assim em seu webMethod

If Not HttpContext.Current.User.Identity.IsAuthenticated Then
    Return Nothing
End If

Pode ser melhor fazer uma exceção se você estiver fazendo uma obtenção, porém, o resultado vazio não é armazenado em cache no lado do cliente.

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