如何在信号中心获得Owin身份
我有一个用ASP.NET MVC编写的应用程序,使用Owin外部认证(蒸汽)的SignalR。
问题是我无法获得SignalR集线器内部的任何身份信息。 Identity.Name返回空字符串,Identity.Claims为空。
Startup.cs
public class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Home/Index"),
AuthenticationMode = AuthenticationMode.Active
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
app.UseSteamAuthentication("API KEY");
}
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR();
}
}
在SteamCallBack中
authenticateResult?.Identity.Claims
不是空的,它返回由Steam提供的正确的Identity.Name。
public async Task<ActionResult> SteamCallback()
{
....
var authenticateResult =
await HttpContext.GetOwinContext().Authentication.AuthenticateAsync("ExternalCookie");
var firstOrDefault = authenticateResult?.Identity.Claims.FirstOrDefault(claim => claim.Issuer == "Steam" && claim.Type.Contains("nameidentifier"));
...
}
在Hub内部,以下所有内容均为空/空
var z = Context.User.Identity.Name;
var b = Context.User.Identity.AuthenticationType;
var x =((ClaimsIdentity)Context.User.Identity).Claims.ToList();
我解决了我的问题。 我忘记了使用IAuthenticationManager.SignIn方法登录用户。
该方法的使用示例:
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties()
{
AllowRefresh = true,
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddDays(7)
}, identity);
链接地址: http://www.djcxy.com/p/95107.html