使用IdentityServer4的多个项目的ASP.NET核心标识

时间:2018-02-09 14:59:38

标签: asp.net-mvc asp.net-core asp.net-identity identityserver4

我有两个使用IdentityServer4的MVC项目的解决方案。在一个项目中,我安装了IdentityServer4并具有对数据库的完全访问权限。另一个项目是MVC客户端。

当我在两个项目上设置[Authorize]属性时,一切正常,但此角色属性[Authorize(Roles = "user")]仅适用于具有IdentityServer4的项目,MVC客户端说:

Unable to resolve service for type   'Microsoft.AspNetCore.Identity.UserManager`1[Entities.Application.ApplicationUser]' while attempting to activate 'IdMWeb.Controllers.AccountController' (this is the project one with the IdentityServer4 installed).

我的问题是,当我没有在项目2中设置角色属性时,为什么项目没有抱怨。 另外,项目2如何从数据库中获取角色?

2 个答案:

答案 0 :(得分:0)

请参阅asp .net核心应用程序的底部链接:

Share authentication cookies path

简单答案:

请在两个或多个ASP.NET Core项目的startup.cs ConfigureServices方法中添加底部代码:(请确保服务器中存在路径“ C:\ sampleDirectoryInServer”)

        services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"C:\sampleDirectoryInServer"))
.SetApplicationName("SharedCookieApp");

        services.ConfigureApplicationCookie(options => {
            options.Cookie.Name = ".AspNet.SharedCookie";
        });

它对我有用(两个具有相同数据库和不同端口的asp.net核心应用)

答案 1 :(得分:-1)

根据您发布的错误消息,可能是您没有在服务器端为此特定客户端定义客户端。 IdentityServer实例仅接受来自其已知道的客户端的请求。配置中间件时,必须为其定义可接受的客户端。