Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    48

    Webservice, permessi per chiamarlo?

    Mi è sorto questo dubbio:
    io ho un'applicazione per la gestione di clienti, che funziona tramite web service.
    questa applicazione rende disponibili una serie di funzioni che possono essere chiamate da altre applicazioni (ad es. nuovo_utente(), modifica_dati() ecc.).
    devo fare in modo che solo chi abbia determinati permessi possa chiamarle?
    cioè, per ogni funzione devo ricevere in input, e controllare una sorta di password inviata dal chiamante?
    Altrimenti chiunque potrebbe chiamare le funzioni e modificare il mio database?
    (La cosa deve necessariamente essere realizzata tramite web service).
    Grazie

  2. #2
    ovvio che si che devi controllare l'utente e i permessi che ha, altrimenti ti succede un macello....
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    48
    Originariamente inviato da Santino83_02
    ovvio che si che devi controllare l'utente e i permessi che ha, altrimenti ti succede un macello....
    quello che mi chiedo è se c'è una tecnica già prevista nei web service, oppure se devo farlo io manualmente per ogni funzione

  4. #4
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Se non sbaglio, solitamente, all'utilizzatore viene fornita una chiave alfanumerica che lo identifica univocamente (poichè viene scambiata tra server non c'è il problema di esporre all'utilizzatore la chiave).
    Sapendo chi è il server utente del tuo web service, avrai anche un metodo (sviluppato da te) per definire cosa può o non può richiedere.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    48
    Originariamente inviato da Luke70
    Se non sbaglio, solitamente, all'utilizzatore viene fornita una chiave alfanumerica che lo identifica univocamente (poichè viene scambiata tra server non c'è il problema di esporre all'utilizzatore la chiave).
    Sapendo chi è il server utente del tuo web service, avrai anche un metodo (sviluppato da te) per definire cosa può o non può richiedere.
    interessante...
    però devo necessariamente accedere al server richiedente autorizzato per trovare la chiave corrispondente?

  6. #6
    Nella dichiarazione del wsdl, basta che inserisci un campo che contiene la chiave (tipo un md5 o qualcosa del genere). Lato server ti basta controllare quella chiave.
    Questo metodo vale in generale per proteggere lameno a livello base i webservice.
    Nel caso che sia previsto un accesso "ad personam", ovvero l'utente "pippo" ha permessi specifici e fa cose che l'utente "pluto" non può fare, allora conviene impostare due campi, utente e password, che passi al server. Lato server quindi ricevi i due valori e li confronti con i record nel db. Se è autorizzato ad accedere, ti crei un metodino che verifica i permessi per la tal funzione


  7. #7
    Come per quando fai un'area privata devi fare un login, stessa cosa succede nei webservices che richiedono di "distinguere tra di loro gli utenti"

    - inserisci un metodo per la login (login come ti pare, user+passw,certificato,etc)

    alla login creerai un "token" che ti salverai nel db associandolo all'utente, e tornerai tale token all'utente nella risposta del webservice

    Fatto ciò, in tutte le richieste che richiedono l'autenticazione, l'utente aggiungerà nell'header della chiamata al webservice il token ottenuto in precedenza, in maneira che tu nel webservice possa leggere tale token e controllare quindi che l'utente sia loggato e abbia i permessi necessari
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    48
    provvisoriamente ho optato per questa soluzione:
    i metodi del ws sono fatti in questo modo:
    Codice PHP:
    public function($chiave$altro_param)
    {
    if(
    $chiave == $this->key)
    {
    procede con l'esecuzione
    }
    else
    throw new SoapFault("999", "non hai i permessi per chiamare questo servizio");

    quindi il client quando chiama una funzione mette come parametro una chiave alfanumerica (tanto non è un ws pubblico, ma intra-aziendale).
    il problema è che la comunicazione avviene tramite HTTP che è in chiaro.

    se metto il file php che contiene il server ws in una cartella di Apache configurata per utilizzare SSL, e nel documento WSDL che descrive il servizio scrivo (in <service>):
    <soap:address location="https://url" />
    la comunicazione avverrà tramite https? come faccio a verificarlo?

    oppure devo modificare anche:
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
    anche se non so cosa dovrei metterci, non ho trovato url per l'https...

  9. #9
    Originariamente inviato da Filuz
    provvisoriamente ho optato per questa soluzione:
    i metodi del ws sono fatti in questo modo:
    Codice PHP:
    public function($chiave$altro_param)
    {
    if(
    $chiave == $this->key)
    {
    procede con l'esecuzione
    }
    else
    throw new SoapFault("999", "non hai i permessi per chiamare questo servizio");

    quindi il client quando chiama una funzione mette come parametro una chiave alfanumerica (tanto non è un ws pubblico, ma intra-aziendale).
    il problema è che la comunicazione avviene tramite HTTP che è in chiaro.

    se metto il file php che contiene il server ws in una cartella di Apache configurata per utilizzare SSL, e nel documento WSDL che descrive il servizio scrivo (in <service>):
    <soap:address location="https://url" />
    la comunicazione avverrà tramite https? come faccio a verificarlo?

    oppure devo modificare anche:
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
    anche se non so cosa dovrei metterci, non ho trovato url per l'https...
    Mi sembra un buon compromesso, quello che esponi
    Riguardo https/http sì, avvegnono in chiaro normalmente. Se imposti il server in https, allora avvengono criptate e il parametro nel wsdl va modificato di conseguenza (location).
    Lo schema invece non mi pare vada modificato, ma se hai modo di fare una prova, ti levi il dubbio da solo


  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    48
    grazie.
    come faccio a verificare il protocollo effettivamente utilizzato?
    devo usare Wireshark o c'è un metodo più immediato?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.