Effettuare una protezione su Web API per l'utilizzo del browser [chiuso]

3

Ho un progetto webapi che lavora in produzione da alcuni mesi.

L'intero webapi è server-server.

Ora è necessario avere la stessa funzionalità in un browser, il che significa che i clienti possono invocare tramite funzioni Ajax direttamente sul server webapi.

Poiché webapi è stateless e l'uso della sessione non è veramente consigliato, quali sono le mie opzioni qui?

Oggi (da server a server), ogni richiesta che raggiunge il server ha utente e passa, e ad ogni richiesta c'è un controllo di accesso (non efficiente, lo so).

Cosa succede quando lo stesso resto webapi deve andare al browser e avere sicurezza?

    
posta SexyMF 05.10.2015 - 20:21
fonte

2 risposte

0

Il modo più comune per fornire sicurezza in un'applicazione API Web è l'utilizzo dell'attributo [Authorize] incorporato. Puoi leggere ulteriori informazioni sull'autenticazione nell'API Web qui . L'attributo Authorize dipende dall'appartenenza ASP.NET o dal framework di identità. È possibile utilizzare il sistema di appartenenza o il sistema di identità. Consiglierei il framework dell'identità poiché è più recente e il modello che verrà supportato in futuro. Puoi leggere ulteriori informazioni sul framework di identità di ASP.NET qui . Un'applicazione di esempio che implementa l'autorizzazione e l'autenticazione utilizzando il framework di identità ASP.NET può essere trovata qui . Fornirò alcuni esempi comuni.

Per limitare l'accesso a tutti i controller / percorsi a livello globale:

public static void Register(HttpConfiguration config)
{
    config.Filters.Add(new AuthorizeAttribute());
}

Per limitare l'accesso ai singoli controller:

// Require authorization for all actions on the controller.
[Authorize]
public class ValuesController : ApiController
{
    //Allow anonymous access on Get, but restrict all other actions
    [AllowAnonymous]
    public HttpResponseMessage Get(int id) { ... }
    public HttpResponseMessage Post() { ... }
}

Per limitare l'accesso a determinate azioni:

public class ValuesController : ApiController
{
    // Anonymous access is allowed on Get
    public HttpResponseMessage Get() { ... }

    // Require authorization for Post.
    [Authorize]
    public HttpResponseMessage Post() { ... }
}

Per limitare l'accesso a un ruolo / utente specifico:

public class ValuesController : ApiController
{
    // Anonymous access is allowed on Get
    public HttpResponseMessage Get() { ... }

    // Require specific user access on Post
    [Authorize(Users="Bob,Joe")]
    public HttpResponseMessage Post() { ... }

    // Require specific role access on Delete
    [Authorize(Roles="Administrators")]
    public HttpResponseMessage Delete() { ... }
}
    
risposta data 06.10.2015 - 00:06
fonte
0

Un'opzione è aggiungere l'autenticazione al tuo server webapi. Un'altra opzione è che potresti già disporre di un server Web con autenticazione correlato a questo server webapi. In tal caso, puoi utilizzare questo server come proxy per il server webapi, eventualmente utilizzando un modello di facciata per semplificare l'interazione ( link ).

    
risposta data 06.10.2015 - 02:16
fonte

Leggi altre domande sui tag