Blazor WebAssembly中使用数据库优先方法的身份验证和授权

时间:2020-08-25 13:05:07

标签: asp.net-core blazor asp.net-core-identity blazor-webassembly

我的问题摘要

我的项目更加复杂,但这是我最基本的问题。我有一个Blazor WebAssembly项目,该项目仅执行基本的CRUD操作。

我也有一个小型数据库,可以说我有两个表UsersRoles。我要做的是通过使用Scaffold-DbContext以数据库优先的方式创建他们的类,并且我在Shared项目上运行了此命令,因为我也希望从Server都访问这些类。和Client个项目。

当我在创建Blazor WebAssembly项目时尝试在“身份验证”选项卡上使用Individual User Accounts时,它将在服务器中创建数据模型。这意味着我无法从Client项目访问我的表。它们必须位于Shared中。它也是基于代码优先的。我不想使用迁移。


我尝试过的

我想做的是用Individual User Accounts项目创建一个几乎相同的项目,但是我的Users类继承了IdentityUser并且我的DbContext继承了ApiAuthorizationDbContext但问题开始了在这里。

我无法从NuGet添加ApiAuthorization程序包,因为它说共享项目与.NetStandard 2.1不兼容。

更改共享项目的标准也不起作用。


一些问题

  • 我不能仅将我的users表添加到Shared并使用该表中的Identity吗? (因为它只是一个较大数据库的单个表)

  • 我需要两个数据库吗?一个用于身份验证,一个用于其余应用程序?

  • 我需要使用身份进行身份验证和授权吗?我还能使用什么?或者我可以在自定义的位置使用自定义的位置(在共享项目中有模型)


我的目标

我想授权具有[Authorize]属性的用户。由于我无法完成注册,因此无法继续。

1 个答案:

答案 0 :(得分:1)

使用2个DbContext。标识表(您的表或ASP.NET)不应属于Shared或Client项目。

我想授权具有[Authorize]属性的用户

真正的授权发生在服务器上,客户端中没有安全的东西。您是否看过模板中完整的(基于JWT的)实现?

  • 我不能仅将我的users表添加到Shared并使用该表中的Identity吗? (因为它只是一个较大数据库的单个表)

否,身份需要基类。而且您的客户端应用不需要(也不应该看到)其大多数属性。

  • 我需要两个数据库吗?一个用于身份验证,一个用于其余应用程序?

那是最好的方法。请注意,对于1个物理Db,您可以具有2个DbContext。

在需要时使用简单的UserId(无Nav属性)链接到用户。