如何在Web API中为桌面应用程序中的自定义数据库模型(代码优先)设置基于令牌的身份验证
本文关键字:设置 身份验证 令牌 于令牌 代码 数据库模型 Web API 自定义 应用程序 桌面 | 更新日期: 2023-09-27 18:27:44
有很多类似的问题,我在网上寻找特定案例的解决方案,但在过去的两天里都没有成功。。。
因此,目前我有3个独立的项目:使用HTTPClient连接Web API的客户端应用程序项目,一个使用数据库模型(来自数据库的代码优先)的项目和使用Web API的项目。我已经成功地正确设置了Web API,这样我就可以从我的客户端应用程序发送HTTP请求,并从IIS上的服务器获取数据,但无法处理正确的基于令牌的身份验证。
我在网上尝试了一些解决方案,但没有一个对我有效,或者我可能不太清楚。
第一个解决方案是:如何在asp.net web api 2中为自己的一组表自定义身份验证?。这个想法是使用Identity技术——通过继承IUser,在我的数据库模型中扩展我自己的User表。即使Web API项目中没有任何内容,我的User表的IUser父类也会导致我的请求停止工作并返回内部服务器错误。所以我想——这可能不是正确的方式。
我尝试的第二个解决方案是:DB-第一次身份验证与ASP.NET Web API 2+EF6混淆我不太确定上面链接中代码中的userService对象是什么。看起来它也返回了一些Identity对象,但它是如何生成一个,它是在内部处理所有UserStore对象、UserManager等,还是只是连接到DB上下文并手动创建一些Identity?尽管有这些,我还是不明白另一件事。在Owin中应该有这样的属性(例如)在启动类之上:
[assembly: OwinStartup(typeof(WebApi2.Startup))]
class Startup
{...}
上面的链接中缺少它,但我想Authetition有必要以某种方式初始化吗?不幸的是,有了这个属性,我甚至无法编译解决方案,除非带有Web API的项目被检查为启动项目(在Visual Studio中)。但在我的解决方案中,客户端应用程序应该是启动项目,在这种情况下,会出现以下构建错误:严重性代码描述项目文件行
Error Unknown build error, 'Cannot resolve dependency to assembly 'Microsoft.Owin, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' BooksLibraryV2
我已经完全被这种身份验证弄糊涂了。。。如果有人能最终为我指明正确的方向,我会非常感激。如果有人愿意澄清我的正确做法,我也会悬赏。
语法-从应用程序创建数据库的代码优先方法-用于OWin Identity Models
1) enable-migrations -ContextTypeName <DbContext-Name-with-Namespaces> -MigrationsDirectory:<Migrations-Directory-Name>
2) Add-Migration -configuration <DbContext-Migrations-Configuration-Class-with-Namespaces> <Migrations-Name>
3)Update-Database -configuration <DbContext-Migrations-Configuration-Class-with-Namespaces> -Verbose
示例
Enable-Migrations -ContextTypeName:OwinAuthenticationWebApiApplication.Models.OwinAuthDbContext -MigrationsDirectory:EntitiesMigrations
Add-Migration –configuration OwinAuthenticationWebApiApplication.EntitiesMigrations.Configuration InitialEntities
Update-Database -configuration:OwinAuthenticationWebApiApplication.EntitiesMigrations.Configuration -Verbose
原来属性:
[assembly: OwinStartup(typeof(WebApi2.Startup))]
不是必需的,尽管默认情况下它在Web API个人用户身份验证模板中。。。OWIN自动搜索所有程序集,只搜索一个名为Startup的类。因此,删除此属性后,我终于可以编译解决方案并按照Fabio Luz DB-首次身份验证与ASP.NET Web API 2+EF6 混淆的提示设置基本令牌身份验证