none
WCF Data Services autenticação básica RRS feed

  • Pergunta

  • Bom dia Pessoal. Estou com outras dúvidas.

    Minha primeira dúvida seria sobre Cross Domain.

    Tenho um serviço (WCF Data Services) e uma aplicação cliente (Ext.Net) consumindo este serviço.

     Como meu serviço e minha aplicação estão em em domínios diferentes ocorre este erro no AJAX, certo? Então o meu serviço deve prover uma "autorização" para meu cliente acessar o mesmo. Essa "autorização" seria eu adicionar no header da requisição estas permissões: 

     

    protected override void OnStartProcessingRequest(ProcessRequestArgs args)
        {
          if (args.OperationContext.RequestHeaders.GetValues("Authorization") != null)
            usuario = System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(args.OperationContext.RequestHeaders.GetValues("Authorization")[0].Split(' ')[1])).Split(':')[0];
          
          var requestHeader = args.OperationContext.RequestMethod.ToString();
    
          if (!String.IsNullOrEmpty(requestHeader))
          {
            args.OperationContext.ResponseHeaders.Add("Access-Control-Allow-Origin", "*");
            switch (requestHeader)
            {
              case "OPTIONS":            
                args.OperationContext.ResponseHeaders.Add("Access-Control-Allow-Methods", "POST, OPTIONS");
                args.OperationContext.ResponseHeaders.Add("Access-Control-Allow-Headers", "X-Requested-With"); 
                args.OperationContext.ResponseHeaders.Add("Access-Control-Allow-Headers", "Content-Type, Accept");            
                break;
              case "GET":            
                args.OperationContext.ResponseHeaders.Add("Access-Control-Allow-Methods", "GET");
                break;
              case "POST":            
                args.OperationContext.ResponseHeaders.Add("Access-Control-Allow-Methods", "POST");
                break;
            }
          }
          base.OnStartProcessingRequest(args);      
          
        }
    

     

    Implementei no meu serviço WCF a autenticação básica. No cliente eu passo no header da requisição o username e o password na base 64.

     Teria que acrescentar também essas permissões no cliente ou seria só no serviço mesmo?

    Pois mesmo eu colocando as permissões tanto no cliente como no serviço ocorre este erro de croos domain.

    Quando eu acesso o serviço direto pelo browser o mesmo pede a autenticação, mas quando acesso pelo cliente (EXT.NET) ocorre este erro.

     Eu teria que adicionar essa permissão em qual momento? Eu adicionei no método acima, mas não está funcionando. Existe outro método que eu possa acrescentar essas permissões no cabeçalho da requisição? Eu coloco um breakpoint no método de inicialização do serviço mas não ocorre nada. Acho que tenho que acrescentar essas permissões antes de solicitar a autenticação.  

     

     

    sexta-feira, 15 de abril de 2011 11:18

Respostas

  • Boas LuizGustavo,

    Não sei se entendi direito a sua dúvida, mas o header Authorization serve para levar do cliente para o serviço o login/senha em Base64, onde o serviço deverá decodificar e analisar para permitir ou não que o cliente acesse o serviço.

    A autorização mesmo, que é verificar se o cliente pode ou não executar uma determinada tarefa, você deve procurar essas permissões no serviço, pois depois que ele se identifica como um usuário válido, você pode recorrer ao teu repositório recuperando as permissões e validar isso antes de processar a requisição em si.


    http://www.israelaece.com
    • Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 18 de abril de 2011 14:08
    • Marcado como Resposta Tiguebas quarta-feira, 20 de abril de 2011 12:18
    segunda-feira, 18 de abril de 2011 13:41
    Moderador

Todas as Respostas

  • Boas LuizGustavo,

    Não sei se entendi direito a sua dúvida, mas o header Authorization serve para levar do cliente para o serviço o login/senha em Base64, onde o serviço deverá decodificar e analisar para permitir ou não que o cliente acesse o serviço.

    A autorização mesmo, que é verificar se o cliente pode ou não executar uma determinada tarefa, você deve procurar essas permissões no serviço, pois depois que ele se identifica como um usuário válido, você pode recorrer ao teu repositório recuperando as permissões e validar isso antes de processar a requisição em si.


    http://www.israelaece.com
    • Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 18 de abril de 2011 14:08
    • Marcado como Resposta Tiguebas quarta-feira, 20 de abril de 2011 12:18
    segunda-feira, 18 de abril de 2011 13:41
    Moderador
  • Boa Israel, Isso o header authorization serve para levar do cliente para o serviço o username e a senha em base64. Isso eu consegui fazer. Mas se eu não adicionar no cabeçalho da  resposta as "autorizações" (bloco switch case acima) ocorre um erro de cross domain.

    Vlw!  

    quarta-feira, 20 de abril de 2011 12:18