ich SignalR bin mit für Benachrichtigungen von Server (Asp.net MVC) an den Client zu senden, und in meinem OnConnected() Methode habe ich Benutzer mit Login-Namen registrieren (E-Mail):SignalR Nabe und Identity.Claims
public override Task OnConnected()
{
string userName = Context.User.Identity.Name;
string connectionId = Context.ConnectionId;
Groups.Add(connectionId, userName);
return base.OnConnected();
}
Jetzt möchte ich AccountId anstelle von Namen verwenden, und ich versuche das mit Identity.Claims. In meiner Login-Methode in Controller habe ich neuen ClaimsIdentity
erstellt[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel model)
{
----
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.Email), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
identity.AddClaim(new Claim(ClaimTypes.Role, "guest"));
identity.AddClaim(new Claim(ClaimTypes.GivenName, "A Person"));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, validation.AccountId.ToString())); //from db
AuthenticationManager.SignIn(new AuthenticationProperties
{ IsPersistent = true}, identity);
AuthenticationManager.SignIn(identity);
-----
}
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
Ich kann meinen ClaimsIdentity in meiner OnConnected Methode in Hub nicht zugreifen kann, mit dieser:
var claim = ((ClaimsIdentity)Context.User.Identity).FindFirst(ClaimTypes.NameIdentifier);
und unter Verwendung ähnliche Weise. Ich versuche viele verschiedene Möglichkeiten, aber ich habe immer zu fällen, dass MVC-Controller und Signal-Hub nicht verwenden Sie den gleichen HttpContext, oder etwas überschreiben meine Ansprüche. Ich versuche auch, neue Identität wie folgt festgelegt:
IPrincipal principal =
new GenericPrincipal(new GenericIdentity("myuser"), new string[] { "myrole" });
Thread.CurrentPrincipal = principal;
oder
HttpContext.User = principal;
Haben Sie versucht, immer den Anspruch von 'HttpContext.Current.User.Identity 'anstelle des' HubCallerContext' welcher SignalR verfügbar macht? – peco