Autenticação SignalR com cliente javascript
Eu estava brincando com oopen authentication
noMVC5
eSignalR
. Eu uso um cliente javascript para chamar um método simples de servidorSignalR
e receba uma resposta do servidor. Funciona bem, mas se eu adicionar o[Authorize]
, ele nem chama o método de servidor (não obteve resposta durante a depuração).
Minha suposição era que o servidor usará o mecanismo de autenticação para desafiar o cliente. Estou faltando alguma coisa? Preciso autenticar manualmente o usuário do lado do cliente e, em caso afirmativo, como passo o token de autenticação?
Aqui está o meuhub
:
[HubName("authChatHub")]
public class AuthChatHub : Hub
{
[Authorize]
public void Ping()
{
Clients.Caller.Pong("Connection is FINE!!");
Clients.Caller.Pong(Context.User == null
? "Null user"
: Context.User.Identity.IsAuthenticated.ToString());
}
}
Aqui está o meuStartup.Auth.cs
public void ConfigureAuth(IAppBuilder app)
{
app.UseGoogleAuthentication();
}
Aqui está oStartup.cs
, usando o código para ativar o CORS.
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app); //added this after a suggestion here, not sure if this is the right place.
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
// EnableJSONP = true //empty for now
};
map.RunSignalR(hubConfiguration);
});
}
}
E finalmente issoclient
código lateral chama ohub
método e escuta o servidor RPC.
this.sendMessage = () => {
this.authChat.server.ping();
};
this.authChat.client.pong = (message) => { console.log(message); };