如何使用SignalR(独立域)进行表单身份验证?

武士披萨猫

好的,所以我已经和SignalR玩了一段时间了。我有一个包含以下项目的VS2013解决方案:

  • 业务项目(包含自定义成员资格提供程序的类库)
  • MVC网站(本地IIS-subdomain1.domain.ext)
  • SignalR(本地IIS-subdomain2.domain.ext)

这些文件在本地运行时,将使用hosts文件转发域。它们在不同的域上运行,因为我希望SignalR与任何其他项目完全独立运行(因为某些桌面软件(可能还有一个iOS应用程序)也可以访问SignalR)。

在Mvc网站上,正在运行一个小留言板。包括留言板的整个网站都位于表单auth的后面。我使用Javascript通过GetMessages自定义函数调用信号,通过SignalR检索了板子上的所有消息MessageHub

 $(function () {
        // Declare a proxy to reference the hub.
        var signalrUrl = SignalrBaseUrl + '/signalr';
        var messageList = $('#messageList');
        var messenger = $.connection.messengerHub;

        messenger.client.addMessage = function (message) {
            addMessageToList(message);
        };

        function init() {
            messenger.server.getAllMessages().done(function (messages) {
                messageList.empty();
                addMessagesToList(messages);
        })
    }

    [...]

    // Start the connection.
    $.connection.hub.url = signalrUrl;
    $.connection.hub.logging = SignalrLogging;
    $.connection.hub.start().done(init);
 })

我只希望经过身份验证的用户能够访问集线器,以及与此相关的所有集线器。设置Authorize属性(或通过config强制对所有集线器进行身份验证)对我来说是众所周知的,我的问题是有关身份验证部分的。

那么如何正确进行身份验证?我相信,只要我们在不同的域上,共享cookie就不会起作用(有人可以确认吗?)。为此,我需要以某种方式使用Mvc网站中创建的Cookie(我猜是?)来使用,但是我不知道如何将其发送到SignalR以及将其与之进行比较?还是将用户名和密码发送到SignalR,然后在业务层中针对成员资格提供程序进行身份验证?实现此目标的最佳模式是什么?任何想法将不胜感激。

武士披萨猫

最终,我通过查看一些用于表单身份验证的单点登录技术的示例找到了解决方案。基本上我所做的是:

将以下内容添加到MVC和SignalR web.config中:

<authentication mode="Forms">
    <forms name="MyCookieName" domain=".domain.nl" cookieless="AutoDetect" loginUrl="My/Login/Url" timeout="525600" />
</authentication>
<machineKey validationKey="12345etc" decryptionKey="cte54321" validation="SHA1" decryption="AES" />

这两个项目都在主域名domain.nl(例如subdomain1.domain.com和subdomain2.domain.com)下运行非常重要。机器密钥用于cookie和票证加密,应在两个web.configs中进行设置。(有关更多信息,请访问:http : //www.codeproject.com/Articles/27576/Single-Sign-on-in-ASP-NET-and-Other-Platforms

在mvc项目中,像往常一样在登录后设置cookie:

FormsAuthentication.SetAuthCookie(loginName, true);

我使用了chrome开发人员工具来检查Cookie的设置是否正确。出于测试目的,我将以下内容放入我的信号中心中,在if语句中放置了一个断点:

if (Context.User.Identity.IsAuthenticated)
{                
}

然后User不为null,并且IsAuthenticated为true。

最终我加了

GlobalHost.HubPipeline.RequireAuthentication();

在SignalR Startup类中,以确保只有经过身份验证的用户才能访问任何集线器。登录之前,尝试进入集线器时,我现在收到401未经授权。登录后,由与SignalR共享的mvc网站创建cookie,并且可以访问集线器。像魅力一样工作,比我预期的简单得多!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用表单身份验证时如何在服务器端获取当前用户域?

来自分类Dev

如何在没有ASPNET身份的情况下使用OWIN表单身份验证

来自分类Dev

如何在Silverlight Web应用程序中进行表单身份验证?

来自分类Dev

使用B2C进行Web表单身份验证

来自分类Dev

如何使用表单身份验证防止未经身份验证访问子文件夹中的 .csv 文件

来自分类Dev

如何正确注销表单身份验证

来自分类Dev

Owin使用外部表单身份验证Cookie

来自分类Dev

如何使用表单身份验证将用户重定向到特定页面

来自分类Dev

使用Laravel 4进行简单身份验证

来自分类Dev

表单身份验证超时被忽略

来自分类Dev

JSF表单身份验证+ OAuth

来自分类Dev

表单身份验证:如何处理未经授权的身份验证用户

来自分类Dev

表单身份验证未通过身份验证无法正常使用外部链接

来自分类Dev

在ASP.NET MVC5中使用自定义登录进行表单身份验证

来自分类Dev

在ASP.NET MVC5中使用自定义登录进行表单身份验证

来自分类Dev

MVC4区域和表单身份验证

来自分类Dev

共享表单身份验证Cookie在子域上不起作用

来自分类Dev

表单身份验证与OWIN UseCookieAuthentication和子域SSO

来自分类Dev

Windows Phone 8开发和WebAPI-通过表单身份验证进行身份验证吗?

来自分类Dev

Windows Phone 8开发和WebAPI-通过表单身份验证进行身份验证吗?

来自分类Dev

如何使用Ember简单身份验证获取当前经过身份验证的用户?

来自分类Dev

在.NET 4.5中混合使用Windows和Forms身份验证:如何在创建表单身份验证票证之后保持Request.IsAuthenticated = false?

来自分类Dev

在.NET 4.5中混合使用Windows和Forms身份验证:在创建表单身份验证票证之前,如何保持Request.IsAuthenticated = false?

来自分类Dev

如何使用登录(用户/密码)文本框在同一页面上登录ADFS WIF联合身份验证和表单身份验证?

来自分类Dev

基于列表的角色进行表单身份验证和隐藏菜单项

来自分类Dev

表单身份验证票未验证

来自分类Dev

如何在ember cli中使用自定义授权者和自定义身份验证器进行ember简单身份验证

来自分类Dev

同时使用表单身份验证和基本身份验证来保护单个操作

来自分类Dev

跨域SignalR身份验证

Related 相关文章

  1. 1

    使用表单身份验证时如何在服务器端获取当前用户域?

  2. 2

    如何在没有ASPNET身份的情况下使用OWIN表单身份验证

  3. 3

    如何在Silverlight Web应用程序中进行表单身份验证?

  4. 4

    使用B2C进行Web表单身份验证

  5. 5

    如何使用表单身份验证防止未经身份验证访问子文件夹中的 .csv 文件

  6. 6

    如何正确注销表单身份验证

  7. 7

    Owin使用外部表单身份验证Cookie

  8. 8

    如何使用表单身份验证将用户重定向到特定页面

  9. 9

    使用Laravel 4进行简单身份验证

  10. 10

    表单身份验证超时被忽略

  11. 11

    JSF表单身份验证+ OAuth

  12. 12

    表单身份验证:如何处理未经授权的身份验证用户

  13. 13

    表单身份验证未通过身份验证无法正常使用外部链接

  14. 14

    在ASP.NET MVC5中使用自定义登录进行表单身份验证

  15. 15

    在ASP.NET MVC5中使用自定义登录进行表单身份验证

  16. 16

    MVC4区域和表单身份验证

  17. 17

    共享表单身份验证Cookie在子域上不起作用

  18. 18

    表单身份验证与OWIN UseCookieAuthentication和子域SSO

  19. 19

    Windows Phone 8开发和WebAPI-通过表单身份验证进行身份验证吗?

  20. 20

    Windows Phone 8开发和WebAPI-通过表单身份验证进行身份验证吗?

  21. 21

    如何使用Ember简单身份验证获取当前经过身份验证的用户?

  22. 22

    在.NET 4.5中混合使用Windows和Forms身份验证:如何在创建表单身份验证票证之后保持Request.IsAuthenticated = false?

  23. 23

    在.NET 4.5中混合使用Windows和Forms身份验证:在创建表单身份验证票证之前,如何保持Request.IsAuthenticated = false?

  24. 24

    如何使用登录(用户/密码)文本框在同一页面上登录ADFS WIF联合身份验证和表单身份验证?

  25. 25

    基于列表的角色进行表单身份验证和隐藏菜单项

  26. 26

    表单身份验证票未验证

  27. 27

    如何在ember cli中使用自定义授权者和自定义身份验证器进行ember简单身份验证

  28. 28

    同时使用表单身份验证和基本身份验证来保护单个操作

  29. 29

    跨域SignalR身份验证

热门标签

归档