我需要实现非常简单的auth mechanizm,基本上有2个角色:Owners和Users.而且我认为拥有Enum就足够了.应用程序本身是SPA,通过Asp.net核心实现webapi.我看到了文章 - 如何使用EF Identity实现它,但是他们的模型看起来比我实际需要的复杂得多,并且EF面向SQL db,我使用mongo.所以我的用户看起来像:
class UserModel{
Id,
Token,
Roles: ["Owners", "Users"],
...
}
Run Code Online (Sandbox Code Playgroud)
那么我需要实现哪些接口并添加到DI才能使用
[Authorize]和[Authorize(Roles="Users")]属性,并且它们根据我在标头中发送的令牌正常工作?
c# authentication authorization asp.net-core-mvc asp.net-core
我想构建一个基于 ASP.NET Core 的 WebApi 用于从数据库访问数据。该 WebApi 可以通过两种方式使用,要么作为需要身份验证的公共 WebApi,要么作为 Web 应用程序的私有后端服务。在后一种情况下,不需要身份验证,因为只有经过身份验证的用户才能访问 Web 应用程序,并且 Web 应用程序和 WebApi 将在同一台计算机上运行,WebApi 将向外部隐藏。
由于我们需要对第一个场景进行身份验证,因此我将使用 Authorize 属性标记所有公共 API。但对于私人场景,我想绕过任何身份验证。
有什么方法可以根据配置中的某些标志使身份验证可选?
更新
说到两种使用场景,我的意思是两个完全独立的安装!每个都有自己的配置文件。是否需要身份验证的决定是根据安装而不是根据单个安装中的请求做出的!我的目标是在配置中只有一个代码库和一个开关。
我想允许具有“管理员”角色的用户隐式访问每个资源。
考虑这个例子:
[Authorize(Role = "BusinessOwner")]
public class UpdateModel : PageModel
{
public ActionResult OnPost()
{
}
}
Run Code Online (Sandbox Code Playgroud)
必须明确设置角色“Admin”。将所有角色添加到 admin 用户不是一种选择,因为角色可以(读取意愿)随时间变化。
[Authorize(Role = "Admin, BusinessOwner")]
public class UpdateModel : PageModel
{
public ActionResult OnPost()
{
}
}
Run Code Online (Sandbox Code Playgroud)
不建议再创建自定义AuthorizeAttribute,那么在 .NET Core 2 中绕过授权检查并允许管理员访问的最佳实践是什么?