SignInManager IsSignedIn 在 SignalR 中心返回 false



我部署 Asp.Net 具有SignalR功能(Gray.microsoft.aspnetcore.signalr.server package(的核心应用程序,并在Hub类中添加Identity授权检查。

public class FooHub : Hub 
{
private SignInManager<ApplicationUser> SignInManager;
public FooHub(SignInManager<ApplicationUser> SignInManager)
{
this.SignInManager = SignInManager;
}
//server method with authorization checking
public void Method()
{
if (!IsAuthorize()) return;
}
private bool IsAuthorize()
{
return SignInManager.IsSignedIn((ClaimsPrincipal)Context.User);
}
}

SignInManager.IsSignedIn返回 false,尽管我的用户已获得身份方案授权。

在IsSignedIn方法的源代码中,我找到了代码(简化(:

return principal.Identities.Any(i => i.AuthenticationType == IdentityConstants.ApplicationScheme);

但是,Hub.Context.User 中存在AuthenticationType == null(因此,IsSignedIn 返回 false(。

我知道在控制器操作中,此字段是从 HttpContext 实例中挖掘出来的。问题是如何在集线器类中手动将其设置为IsSignedIn返回true?

对我来说,这个问题是因为Cookies.ApplicationCookie.AutomaticAuthenticate = false;即在启动类中,身份配置应该是

services.Configure<IdentityOptions>(options => { 
// other configs
options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
});

因此,当客户端请求 Hub 方法时,它会自动使用 Identity 进行身份验证。 如果成功,则返回SignInManager.IsSignedIntrue

相关内容

  • 没有找到相关文章

最新更新