【问题标题】:Is there a way to utilize the [Authorize] attribute within a condition in the CSHTML of a razor page?有没有办法在剃须刀页面的 CSHTML 条件中利用 [Authorize] 属性?
【发布时间】:2020-04-07 09:31:41
【问题描述】:

我正在开发一个 dotnet core/js 应用程序,其中包括身份验证页面在内的所有前端代码都是使用 JS 框架生成的,其中捆绑的前端被注入到单个 Razor 页面中。前端从控制器 api 端点访问所有 dotnet 核心逻辑。身份验证使用不记名令牌,并且 [Authorize(role='whatever')] 在多个控制器中使用。

由于某种原因,一个 javascript 插件从 razor 页面注入到应用程序中。在用户通过身份验证之前,我基本上需要这个插件不可见。这不是“秘密”内容的问题,但插件在用户通过身份验证之前没有用。有没有一种简单的方法可以让我找出用户是否在代码的 CSHTML 中与控制器属性一样获得授权?我一直在四处寻找,没有发现任何有用的东西。不是 c# 或 dotnet core 方面的专家(主要是在前端工作),如果是最简单的解决方案,我们将不胜感激。不知道我是否遗漏了任何相关信息。如果有,请告诉我!

【问题讨论】:

  • 您只是想检查用户是否认证(即登录),用户是否处于特定角色,还是要检查特定的授权政策?
  • 仅当用户通过身份验证时。角色无关紧要:) 对政策的设置了解不多。如果有必要,我会深入研究它。

标签: c# asp.net-core razor-pages asp.net-authorization


【解决方案1】:

根据您的条件的复杂性,您有几种方式来授权用户。

如果你只是想验证用户是否认证,即他们是否成功登录,而不管用户是谁,那么你可以检查一下User.Identity.IsAuthenticated:

@if (User.Identity.IsAuthenticated)
{
    <p>User is signed in.</p>
}

如果你想验证用户has a specific role,那么你也可以直接对User主体对象进行操作,只检查那个特定的角色:

@if (User.IsInRole("role-name"))
{
    <p>User is in role <em>role-name</em>.</p>
}

否则,如果您想利用 ASP.NET Core 中授权系统的全部功能,您还可以注入 IAuthorizationService 并针对 configured authorization policy 授权用户:

@inject IAuthorizationService _authorizationService

@if ((await _authorizationService.AuthorizeAsync(User, "policy-name")).Succeeded)
{
    <p>User was authorized against policy <em>policy-name</em>.</p>
}

【讨论】:

  • 感谢您的快速回复!我实际上尝试过的第一个推荐的解决方案,但是 User 对象基本上是 null 这让我感到困惑,因为我认为这会起作用,因为控制器中的剩余授权检查工作......不知道下一步从哪里开始那里没有试图弄清楚整个授权/身份验证设置。
  • User 绝不应该是null,即使对于未经身份验证的用户也是如此。 – 这是一个普通的 Razor 页面?你的Startup.Configure 中有app.UseAuthentication()
  • 嗯,它不是一个空引用,但用户的所有参数都是空的。我认为这是一个普通的剃须刀页面。 app.UseAuthentication() 已配置。
  • 既然认证是基于不记名令牌的,是不是只用REST api请求的认证头来判断谁被授权呢?剃须刀页面没有此信息...有什么想法吗?
  • @Beltway 您可以通过HttpContext.AuthenticateAsync("Scheme") 使用身份验证服务,其工作方式类似于AuthorizeAsync 的工作方式(仅用于身份验证,而不用于授权)。根据结果​​,您可以针对该方案在 HttpContext 上发起挑战。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2013-10-18
  • 2021-11-23
相关资源
最近更新 更多