【问题标题】:How i can perform Token based Authentication in SignalR?我如何在 SignalR 中执行基于令牌的身份验证?
【发布时间】:2019-04-30 01:25:32
【问题描述】:

我在 asp.net mvc 应用程序中使用 signalR,我想验证交叉 域客户端通过基于令牌的身份验证。我没有找到完整的解决方案 它。

 app.Map("/signalr", map =>
    {
        map.UseCors(CorsOptions.AllowAll);

        map.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
        {
            Provider = new QueryStringOAuthBearerProvider()
        });

        var hubConfiguration = new HubConfiguration
        {
            Resolver = GlobalHost.DependencyResolver,
        };
        map.RunSignalR(hubConfiguration);
    });

    public class QueryStringOAuthBearerProvider : OAuthBearerAuthenticationProvider
    {
        public override Task RequestToken(OAuthRequestTokenContext context)
        {
            var value = context.Request.Query.Get("access_token");

            if (!string.IsNullOrEmpty(value))
            {
                context.Token = value;
            }

            return Task.FromResult<object>(null);
        }
    }

    public class impAuthHub : Hub
    {
        [Authorize]
        public void SendMessage(string name, string message)
        {
           Clients.All.newMessage(name, message);
        }
    }

我不知道如何获取令牌以将查询字符串传递给我的启动类?

【问题讨论】:

  • 但我正在研究 Asp.net Mvc。

标签: c# asp.net-mvc signalr access-token


【解决方案1】:

您需要通过 SignalR 使用 OAuth Bearer Token 身份验证。并且您需要使用 Microsoft 的 OWIN Security 和 ASP.NET Identity 库,然后包含 WebAPI 和个人帐户安全选项。这是Full- Demo

请找到工作示例git 的代码库,这将对您有所帮助。

【讨论】:

  • 如果我正确解释了这个代码库,它假定 SignalR 服务器将充当授权服务器,但是如果这个责任由第三方身份提供者处理呢? (IdentityServer、Keycloak 等)
  • 要回答我自己的问题,在 Startup 中添加以下内容就足够了:map.UseOAuthBearerAuthentication,以及我们在 OAuthRequestTokenContext 上设置令牌的 Provider。在 Hub 类中,我们可以只使用标准的Authorize 属性。
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 2016-01-23
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多