如何使用MVC5 ASP.NET Identity Framework对SignalR .NET Client进行身份验证

时间:2014-06-17 16:35:52

标签: asp.net xamarin asp.net-mvc-5 signalr asp.net-identity

我一直在研究这个问题,似乎无法弄明白。

我有一个.NET SignalR客户端需要使用ASP.NET身份验证(MVC5)进行身份验证,以便它可以访问使用[Authorize]属性保护的SignalR集线器。

我找到了以下资源(请参阅.NET客户端/ Cookie的身份验证选项):

http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization

但是,检索cookie的代码示例由于以下原因而无法正常工作:

authCookie = response.Cookies[FormsAuthentication.FormsCookieName];

因为我没有使用表单身份验证,所以会产生错误。

我不确定如何为ASP.NET身份更改此内容?

我是否专注于正确的方法,即。检索cookie然后将其添加到Cookie容器中?或者我应该将标题中的用户名和密码传递给集线器并以这种方式进行身份验证?

我没有意识到使用带有SignalR和Identity Framework的.NET客户端进行身份验证会有多么混乱。

即使不是我的用例,我也用Xamarin标记问题,因为我觉得这可能是使用SignalR .NET客户端的Xamarin移动开发人员所面临的问题。

由于我似乎无法在互联网上找到任何示例,所以非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

只需更改此

var authCookie = response.Cookies[FormsAuthentication.FormsCookieName];

var authCookie = response.Cookies[".AspNet.ApplicationCookie"];

答案 1 :(得分:0)

如果您使用ASP.NET身份与 Owin ,在用户登录并成功验证后,对于传入请求,您可以更改AuthenticateUser方法:

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

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

到此:

var context = Request.GetOwinContext();
var isAuthenticated= context.Authentication.User.Identity.IsAuthenticated;
return isAuthenticated;

如果你只需要获取cookie:

var cookieName = Request.Cookies.AllKeys.SingleOrDefault(c => c.Contains(DefaultAuthenticationTypes.ApplicationCookie));
if (cookieName != null)
{
    var cookie = Request.Cookies[cookieName];
}