SignalR ClaimsIdentity Null Bearer令牌

时间:2016-03-04 04:52:37

标签: asp.net-web-api signalr claims-based-identity signalr-hub bearer-token

我在使用connectionIds创建字典后访问userId时遇到了一些问题。我目前正在使用OAuthBearer对我的用户进行身份验证并将信息保存到ClaimsIdentity中,如下所示:

            public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        using (AuthRepository _repo = new AuthRepository())
        {

            IdentityUser user = await _repo.FindUser(context.UserName, context.Password);
            var identity = new ClaimsIdentity(context.Options.AuthenticationType);
            identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
            identity.AddClaim(new Claim(ClaimTypes.Role, "user"));
            identity.AddClaim(new Claim("sub", context.UserName));
            identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Id));


            var props = new AuthenticationProperties(new Dictionary<string, string>
            {
                { 
                    "as:client_id", (context.ClientId == null) ? string.Empty : context.ClientId
                },
                { 
                    "userName", context.UserName
                },
                { 
                    "userId", user.Id
                }
            });

            var ticket = new AuthenticationTicket(identity, props);
            context.Validated(ticket);
        }

    }

当我在我的启动/我的signalR中心时,当我尝试使用IRequest.user.identity.name或HttpContext.Current.User.Identity.GetUserId();时,我得到一个空值。

public string GetUserId(IRequest request)
        {
            var userId = request.User.Identity.Name;
            return userId.ToString();
        }

我认为我的说法有问题,因为我无法访问UserId和userName的值。如果我在其他地方运行HttpContext.Current.User.Identity.GetUserId();,我可以获得userId。

任何帮助都会非常感激,因为我已经坚持了很长一段时间。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,请尝试将HttpContext.Current替换为 在您的signalR集线器方法中Context.Request.GetHttpContext()

根据MSDN,HubCallerContext返回客户端的上下文。