Explorar a segurança de serviços da web

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 2 min. de leitura
  • Aplique a segurança usando autenticação básica, autenticação mútua ou WS-Security.

    Autenticação básica

    Para impor a autenticação básica a cada solicitação de um documento WSDL ou publicação de mensagens de SOAP, é necessário definir a propriedade glide.basicauth.required como verdadeira. Se você fizer isso, cada solicitação WSDL ou SOAP terá que conter o cabeçalho "Autorização", conforme especificado no protocolo Autenticação básica. Uma vez que a solicitação não é interativa, o cabeçalho Autorização é sempre necessário durante uma solicitação.

    O fornecimento de informações de autenticação básica, necessárias ou não, tem a vantagem adicional de que os dados criados ou atualizados como resultado da invocação do serviço Web são feitos em nome do usuário fornecido nas credenciais de autenticação básica. Como exemplo, ao criar um Registro de incidente, os campos de diário têm a ID do usuário autenticado básico, em vez do usuário Convidado padrão.

    Para que o cabeçalho de autorização ignore as regras de capitalização, use a propriedade glide.security.script.include.name.case.insensitive.list. É possível modificar esta propriedade na tabela Propriedades do sistema [sys_properties] e adicionar as inclusões de script necessárias para processar a autenticação. Por padrão, esta propriedade tem os valores:
    • BasicAuth
    • CustomAuth
    Adicione outras inclusões de script conforme necessário.
    É possível implementar a seguinte função para fornecer autenticação básica ao usar as bibliotecas Perl e SOAP::Lite:
    sub SOAP :: Transport :: HTTP :: Client :: get_basic_credentials { return 'user_name' => 'password' ; }
    • Ao usar o C# .NET versão 2005 ou anterior, é possível aproveitar as vantagens do objeto Credenciais, por exemplo:
      System.Net . ICredentials cred  = new System.Net . NetworkCredential ( "user_name",  "password" ) ;
       
      service . ServiceNow proxy  = new service . ServiceNow ( ) ;
      service . get getService  = newservice . get ( ) ;
      service . getResponse getServiceResponse  = new service . getResponse ( ) ;
       
       try {
        proxy . Credentials = cred ;
        getService . sys_id = "bf522c350a0a140701972dbf876f1610" ;
        getServiceResponse  = proxy . get (getService ) ; catch (Exception ex ) { }
    • Ao usar o C# .NET versão 2008, é possível aproveitar as vantagens do objeto ClientCredenciais, por exemplo:
      Demo_Incident. ServiceNowSoapClient client  = new Test08WebService . Demo_Incident . ServiceNowSoapClient ( ) ;
      client . ClientCredentials . UserName . UserName = "admin" ;
      client . ClientCredentials . UserName . Password = "admin" ;
      Em seguida, no arquivo app.config, procure o seguinte e altere Nenhum para Básico:
      <transport clientCredentialType= "None" proxyCredentialType= "None" realm= "" />
    • Ao usar o VB .NET, aproveitar as vantagens do objeto Credenciais seria algo como:
      Sub Main()
               Dim cred  As New System.Net.NetworkCredential( "user_name",  "password")
       
               Dim proxy  As New VB_Democm.incident.ServiceNow
               Dim getIncident  As New VB_Democm.incident. get Dim getResponse  As New VB_Democm.incident.getResponse
       
              proxy.Credentials = cred
       
              getIncident.sys_id =  "[your sysID here]"
       
              getResponse = proxy. get(getIncident)
       
           End Sub
      A resposta resultante quando a autenticação básica é ativada e nenhuma credencial é fornecida é algo como:
      <html> <head > <title >Apache Tomcat/5.0.28 - Error report </ title > <style > <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}    H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;}    H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;}    BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;}    B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;}    P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}   A {color&nbsp;: black;}   A.name {color&nbsp;: black;}   HR {color&nbsp;: #525D76;}--> </ style > </ head > <body > <h1 >HTTP Status 401 -\ </ h1 > <HR size = "1" noshade = "noshade" > <p >< b >type </ b > Status report </ p > <p >< b >message </ b > <u >< / u >< / p > <p >< b >description </ b > <u >This request requires HTTP authentication (). </ u >< / p > <HR size = "1" noshade = "noshade" > <h3 >Apache Tomcat/5.0.28 </ h3 > </ body > </ html >