如何在Web API中为桌面应用程序中的自定义数据库模型(代码优先)设置基于令牌的身份验证

时间:2015-12-22 23:28:33

标签: c# asp.net authentication asp.net-web-api oauth

有很多类似的问题,我在网上寻找解决我的具体案例,但过去2天没有成功......

所以目前我有3个独立的项目:项目与客户端应用程序,使用HTTPClient连接Web API,项目与数据库模型(Code First来自数据库)和项目与Web API。我已设法正确设置Web API,以便我可以从我的客户端应用程序发送HTTP请求,并从IIS上的服务器获取数据,但无法处理正确的基于令牌的身份验证。

我在网上尝试了一些解决方案,但它们都没有为我工作,或者我可能听不清楚。

第一个解决方案是:How to customize authentication to my own set of tables in asp.net web api 2?。 我们的想法是使用Identity技术 - 通过继承IUser在我的数据库模型中扩展自己的User表。即使没有触及Web API项目中的任何内容,我的User表的IUser父类也导致我的请求停止工作并返回内部服务器错误。所以我想 - 这可能不是正确的方式。

我尝试的第二个解决方案是:DB-First authentication confusion with ASP.NET Web API 2 + EF6 我不太确定上面链接的代码中的userService对象是什么。看起来它也会返回一些Identity对象,但它是如何生成一个,它是否在内部执行所有UserStore对象,UserManager等,或者只是连接到DB上下文并手动创建一些Identity?即使是那些我不了解的东西。在Owin中,应该在启动类之上有这样的属性(例如):

[assembly: OwinStartup(typeof(WebApi2.Startup))]
class Startup
{...}

它缺少上面的链接,但我想这是必要的认证以某种方式初始化?遗憾的是,使用此属性我甚至无法编译解决方案,除非将带有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      

我已经完全对这种认证感到困惑......如果有人能指出我正确的方向,我会非常感激。如果有人愿意向我澄清正确的方法,我也会给予赏金。

2 个答案:

答案 0 :(得分:1)

语法 - 代码优先从应用程序创建数据库的方法 - 用于OWin身份模型

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

答案 1 :(得分:0)

原来是属性:

[assembly: OwinStartup(typeof(WebApi2.Startup))]

不是必需的,但默认情况下是Web API Individual Users Authentication模板... OWIN会自动搜索所有程序集只是一个名为Startup的类。因此,在删除此属性后,我终于可以编译解决方案并按照Fabio Luz DB-First authentication confusion with ASP.NET Web API 2 + EF6提到的提示设置基本令牌身份验证