Negli esempi che abbiamo visto fino a oggi su ASP.NET SignalR, abbiamo sempre utilizzato hub che erano invocabili anche da un utente anonimo. In realtà, questo framework è in grado di gestire anche scenari in cui sia richiesta l'autenticazione dell'utente stesso. Per rendere sicuro un hub, infatti, non dobbiamo far altro che utilizzare l'attributo Authorize:
[Authorize] public class PingBackHub : Hub { public void SendMessage(string message) { this.Clients.All.pingBack( string.Format("Client {0} says: {1}", this.Context.User.Identity.Name, message)); } }
Questo attributo funziona in maniera analoga a quello di ASP.NET MVC: se utilizzato senza parametri, richiede una semplice autenticazione, ma eventualmente permette anche di specificare ruoli o nomi degli utenti abilitati. Esso può essere applicato a un singolo metodo o, come nel nostro esempio, all'intero hub. In quest'ultimo caso, un client non autenticato non riuscirà a effettuare la connessione.
Se vogliamo consentire comunque la connessione, possiamo impostare la proprietà RequireOutgoing a false:
[Authorize(RequireOutgoing = false)] public class PingBackHub : Hub { // ... }
In questo caso, i client anonimi saranno abilitati solo a ricevere i messaggi inviati dal server, ma non saranno in grado di invocarne i metodi esposti.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Load test di ASP.NET Core con k6
Evitare il flickering dei componenti nel prerender di Blazor 8
Sostituire la GitHub Action di login su private registry
Utilizzare la libreria Benchmark.NET per misurare le performance
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Evitare la command injection in un workflow di GitHub
Effettuare il pull di git LFS in un workflow di GitHub
Generare token per autenicarsi sulle API di GitHub
Eseguire operazioni sui blob con Azure Storage Actions
Determinare lo stato di un pod in Kubernetes
Inizializzare i container in Azure Container Apps