In my last post, I talked about creating a CookieProvider
for handling OAuth Bearer Tokens from an HTTP Cookie. Now that we have this capability, we can make a secure connection to SignalR using a Cookie store rather than adding our tokens to the Authorization
HTTP Header.
By using cookies instead of the HTTP Header, we can now use a full Websocket connection rather than being forced into long polling. Using websockets increases speed of messages received and messages sent.
So here’s the quick bit of code for making a secure SignalR Websocket connection:
SignalRConnectionService.cs
public class SignalRConnectionService { private HubConnection _connection; public IHubProxy AppHubProxy { get; set; } public SignalRConnectionService() { _connection = new HubConnection(YOUR_SIGNALR_URL); AppHubProxy = _connection.CreateHubProxy("AppHub"); } public async Task StartAsync() { try { if(_connection.State != ConnectionState.Disconnected) { _connection.Stop(); } _connection.CookieContainer = new CookieContainer(); _connection.CookieContainer.Add(new Uri(THE_BASE_URL_OF_YOUR_SERVER), new Cookie("BearerToken", YOUR_ACCESS_TOKEN)); await _connection.Start(); } public void Stop() { _connection.Stop(); } }
Now we have the full speed of websockets enabled in our Xamarin, Mac, and Windows applications!
If you like what you see, don’t forget to follow me on twitter @Suave_Pirate, check out my GitHub, and subscribe to my blog to learn more mobile developer tips and tricks!
One thought on “Xamarin.Tips – Sending Authorized SignalR Requests”