我有两个使用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如何从数据库中获取角色?
答案 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实例仅接受来自其已知道的客户端的请求。配置中间件时,必须为其定义可接受的客户端。