Domanda

Sto progettando un servizio riposante e una delle entità per mantenere - gli account utente. Lo sto facendo in .NET e l'utilizzo di provider di appartenenze.

Ecco quello che ho:

/ utenti / GET - Lista rendimenti di utenti

/ utenti / POST - in grado di creare o aggiornare più utenti (matrice carica di utente oggetti)

Questo post non importa se si aggiorna o la creazione di utente

problema che ho: come posso creare un servizio di modifica password? Cambiare la password è separata dalla procedura di aggiornamento utenti. Sto pensando qualcosa del tipo:

/ utenti / {username} / password POST - per cambiare la password dell'utente.

Ma poi devo passare oggetto diverso qui? (Io uso JSON)

Avete qualche suggerimento su come il layout URL? E dovrei davvero creare un altro oggetto? MembershipProvider richiede vecchia e la nuova password per il cambiamento

È stato utile?

Soluzione

Beh, la domanda deve essere se noi vediamo la password come una risorsa a sé stante, oppure no.

Nei miei DBS utente, ho conservare tutte le mie password (salata e allungato) nella propria tabella, in modo da poter facilmente presentare la password come risorsa separata. Ma solo perché non si dispone di che controllo a grana fine non significa che non si può fare lo stesso - ma non avrebbe preso in considerazione l'attuazione di un GET per la password, in ultima analisi, è necessario un servizio di autenticazione per questo, che dovrebbe seguire alcuni tipo di protocollo.

Un servizio resto è libero di rappresentare i suoi dati tuttavia si desidera, senza un vero riguardo per la struttura sottostante in modo, dato che, penso che tu sia libero di farlo come una risorsa separata se ha un senso nel tuo caso.

Si potrebbe includere nei dati degli utenti un URI da utilizzare per la modifica della password. Il cliente avrebbe dovuto conoscere il tipo di dati da inviare (quindi sì avrete bisogno di un tipo di risorsa dedicata per gestire la richiesta di modifica), e che l'URI deve essere attivato con una richiesta POST.

Altri suggerimenti

Se ho capito la tua domanda, vuoi suggerimenti su come legato alla Uri stesso layout. I suggerimenti di seguito è legata specificamente alla progettazione di un URI che qualcuno possa utilizzare per modificare una password.

Non includere tutte le informazioni sensibili in chiaro in URI, anche se si tratta su HTTPS, come queste possono essere scritti i file di log del server, o, peggio, registrata da Analytics o software di monitoraggio. Assicurarsi che le informazioni sensibili vengono inviati come parte del corpo o di parte dell'intestazione.

Qui ci sono un paio di considerazioni perché modifica di una password con un servizio di restfull può richiedere la propria Uri:

  1. Impedire accidentali modifiche a una password quando si aggiorna un dettagli utente.
  2. Ogni volta che questo metodo di modifiche, potrebbe essere necessario Commenti aggiuntivi di sicurezza, come eventuali difetti in esso che consente a un utente anonimo per modificare la password di un utente esistente che permetterà utente anonimo di dirottare il conto.
  3. Si può anche voler includere altre funzionalità di sicurezza aggiuntive come notificare a un utente che la password è cambiata e invalidare qualsiasi OAuth gettoni problemi alle applicazioni. Il provider di appartenenza è grande, ma non fornisce questi ulteriori misure.
  4. Dal momento che si tratta di un diverso Uri è possibile monitorare il suo utilizzo e messi in relazione agli indirizzi IP che consente di rilevare se qualcuno sta cercando di compromettere un account utente.

Si può solo mettere un contratto di dati https://example.com/users/{id}/password:

[DataContract]
public class ChangePassword
{
   [DataMember]
   public string OldPassword { get; set; }

   [DataMember]
   public string NewPassword { get; set; }
}

Quest'ultimo assume si autorizza se il client può effettivamente eseguire questa azione. Si consiglia di guardare vs POST in REST se utilizzare PUT o POST. Inoltre, il libro RESTful Web Services e REST API design Rulebook è stato prezioso per me durante la progettazione di servizi, tra cui il layout restfull Uri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top