来自具有身份 2.0 的桌面客户端的 SignalR 身份验证
SignalR authentication from desktop client with identity 2.0
今年秋天我想学习和编写客户端-服务器。秋天结束了,应用程序不存在,所以我正在寻求帮助。我仍然不明白如何从信号中心使用身份 2.0 进行登录。
如果想连接到集线器,像
那样做
hub.invoke("UsualLogin",login,password)
//服务器检查数据库并发回登录状态代码并进行身份验证。
我也想做
hub.invoke("GoogleLogin")
// 服务器要求 google 进行身份验证,如果需要则发回 smth 以打开浏览器,但我不想打开浏览器进行常规登录。我什至不希望网页存在。
我阅读了大量信息,观看了数十个示例,但不明白如何做到这一点。你能举个例子,只连接到集线器,验证并开始[授权]与自己聊天吗?所以我只能看到它是如何完成的以及它是在哪里完成的。
Ps:我不是懒惰的学生,这只是我个人的项目。
google 搜索 signalr authentication
的第一个结果是:
Authentication and Authorization for 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;
}
}
}
今年秋天我想学习和编写客户端-服务器。秋天结束了,应用程序不存在,所以我正在寻求帮助。我仍然不明白如何从信号中心使用身份 2.0 进行登录。
如果想连接到集线器,像
那样做hub.invoke("UsualLogin",login,password)
//服务器检查数据库并发回登录状态代码并进行身份验证。
我也想做
hub.invoke("GoogleLogin")
// 服务器要求 google 进行身份验证,如果需要则发回 smth 以打开浏览器,但我不想打开浏览器进行常规登录。我什至不希望网页存在。
我阅读了大量信息,观看了数十个示例,但不明白如何做到这一点。你能举个例子,只连接到集线器,验证并开始[授权]与自己聊天吗?所以我只能看到它是如何完成的以及它是在哪里完成的。
Ps:我不是懒惰的学生,这只是我个人的项目。
google 搜索 signalr authentication
的第一个结果是:
Authentication and Authorization for 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;
}
}
}