来自具有标识2.0的桌面客户端的SignalR认证

时间:2015-11-30 17:55:36

标签: asp.net authentication signalr identity signalr-hub

今年秋天,我想学习并编写客户端服务器。秋天结束了,应用程序不存在,所以我要求一些帮助。我仍然无法理解如何从信号器集线器登录身份2.0。

如果想要连接到集线器,请执行

之类的操作

hub.invoke("UsualLogin",login,password) //服务器检查数据库并发回用于登录状态的代码并进行身份验证。

我也想做 hub.invoke("GoogleLogin") //服务器要求google进行身份验证,如果需要,请将smth发回打开浏览器,但我不希望打开浏览器进行常规登录。我不希望网页存在。

我阅读了大量信息,看了几十个例子,但不明白怎么做。你能举例,它只连接到集线器,验证并开始[授权]与自己聊天吗?所以我只能看到它是如何完成的以及它在哪里完成的。

Ps:我不是一个懒惰的学生,这只是我的个人项目。

1 个答案:

答案 0 :(得分:0)

谷歌搜索signalr authentication的第一个结果是:

  

SignalR Hubs的身份验证和授权 - ASP.Net   http://www.asp.net/signalr/overview/security/hub-authorization

其中包括您要求的示例......

class Program
{
    static void Main(string[] args)
    {
        var connection = new HubConnection("http://www.contoso.com/");
        Cookie returnedCookie;

        Console.Write("Enter user name: ");
        string username = Console.ReadLine();

        Console.Write("Enter password: ");
        string password = Console.ReadLine();

        var authResult = AuthenticateUser(username, password, out returnedCookie);

        if (authResult)
        {
            connection.CookieContainer = new CookieContainer();
            connection.CookieContainer.Add(returnedCookie);
            Console.WriteLine("Welcome " + username);
        }
        else
        {
            Console.WriteLine("Login failed");
        }    
    }

    private static bool AuthenticateUser(string user, string password, out Cookie authCookie)
    {
        var request = WebRequest.Create("https://www.contoso.com/RemoteLogin") as HttpWebRequest;
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.CookieContainer = new CookieContainer();

        var authCredentials = "UserName=" + user + "&Password=" + password;
        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(authCredentials);
        request.ContentLength = bytes.Length;
        using (var requestStream = request.GetRequestStream())
        {
            requestStream.Write(bytes, 0, bytes.Length);
        }

        using (var response = request.GetResponse() as HttpWebResponse)
        {
            authCookie = response.Cookies[FormsAuthentication.FormsCookieName];
        }

        if (authCookie != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}