检查用户是不是在 ASP.NET Core 中使用基于令牌的身份验证登录

Posted

技术标签:

【中文标题】检查用户是不是在 ASP.NET Core 中使用基于令牌的身份验证登录【英文标题】:Check if user is logged in with Token Based Authentication in ASP.NET Core检查用户是否在 ASP.NET Core 中使用基于令牌的身份验证登录 【发布时间】:2017-05-10 00:18:33 【问题描述】:

我设法在我的应用程序中实现了这个基于令牌的身份验证系统,但我有一个小问题。如何在方法中检查用户是否对其进行了签名(例如,请求中是否有有效的令牌)?那么使用 [Authorize] 呢?

所以我有控制器,并且在那个控制器中我想检查用户是否已登录。我想使用这个:

if (_signInManager.IsSignedIn(ClaimsPrincipal.Current))

    ...

但它不起作用,因为 ClaimsPrincipal.Current 始终为空

【问题讨论】:

【参考方案1】:

您不需要使用 SigninManager 或类似的东西。用户被注入管道(在基本控制器的 User 属性上),并且它的信息由身份验证中间件(cookie 或令牌)自动填充。所以,在你的控制器上:

bool isAuthenticated = User.Identity.IsAuthenticated;

【讨论】:

我试过你的代码,但上面写着The name 'User' does not exist in the current context 您的控制器类是继承自“Controller”还是 POCO? 从控制器继承解决了这个问题!我不敢相信我忘记了!【参考方案2】:

是的。将[Authorize] 属性放在您的类或方法之上,以检查用户是否通过身份验证。您可以通过此代码获取用户:

var principal = User as ClaimsPrincipal;
var check = User.Identity.IsAuthenticated;

【讨论】:

我想在没有 [Authorize] 的情况下尝试它,但它显示 The name 'User' does not exist in the current context 您需要以下命名空间:using System.Security.Principal; 我现在引用了,但没有区别 或使用 HttpContext.Current.User HttpContext.Current.User

以上是关于检查用户是不是在 ASP.NET Core 中使用基于令牌的身份验证登录的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP .NET Core Web API 请求期间检查用户声明

在 ASP.NET Core Identity 中使用 Authorize 属性检查多个策略之一

在 ASP.NET Core 中缓存导航栏链接

在 ASP.NET Core 中,是不是可以通过将身份验证转发到另一个方案来在一个方案中抢先创建新用户?

使用 C# 在 ASP.NET 中检查 SQL Server 表中的列值是不是为空

ASP.NET Core Windows 身份验证和应用程序角色