在一个MVC项目中处理多个ASP.net Core 2.1身份

时间:2019-02-12 07:51:29

标签: c# asp.net asp.net-core-mvc asp.net-identity asp.net-core-2.1

我们有一个Account-API,负责创建JWT令牌,然后将其用于不同的API上以对用户进行身份验证。我们之所以选择Account-API方法,是因为这样我们可以在一个API中集中管理帐户,创建令牌等,而其他API只信任令牌,这样就可以使一切保持良好的组织和无状态。

现在的问题是,我们已经在不同的DBContext中实现了AdminUsers和Customer,以在数据库中“物理地”将这些登录名彼此分开。

我们在Startup.cs中对AddIdentity的调用:

services.AddIdentity<CustomerUser, CustomerRole>()
   .AddEntityFrameworkStores<CustomerContext>();

services.AddIdentity<AdminUser, AdminRole>
   .AddEntityFrameworkStores<AdminContext>();

现在,当我们添加身份验证中间件UseAuthentication()时,我在启动时遇到了一个异常:

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Private.CoreLib.dll: 'Scheme already exists: Identity.Application'
   at Microsoft.AspNetCore.Authentication.AuthenticationOptions.AddScheme(String name, Action`1 configureBuilder)
   at Microsoft.AspNetCore.Authentication.AuthenticationBuilder.<>c__DisplayClass4_0`2.<AddSchemeHelper>b__0(AuthenticationOptions o)
   at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)
   at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
[...]

由于仅在添加UseAuthentication之后才抛出此异常,所以我认为在幕后为每个发现的身份添加Authentication-Scheme会带来一些魔术,从而导致此异常。

这里的问题:我们正在使用IdentityServer4进行令牌创建,并准备使用OAuth2.0。 IdentityServer4代表我们呼叫UseAuthentication。而且我们实际上需要AccountAPI中的身份验证,因为我们为用户提供了一个/me端点来检索他们的个人资料(但在这里ID令牌可能是更好的方法?)

在这种情况下我们可以做些什么?是否可能在一个应用程序中真正分离了帐户和身份,还是必须将其拆分为两个应用程序?还是创建我们自己的身份验证中间件(确定哪个用户ID被封装在JWT中)?

0 个答案:

没有答案