首页 > 解决方案 > identityserver4 和 asp net core spa

问题描述

我创建了一个项目模板

dotnet new react -o project_name -au 个人

因此,在使用身份验证和身份服务器搭建 React 应用程序后,将以下内容添加到 startup.cs 文件

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlite(
                    Configuration.GetConnectionString("DefaultConnection")));

            services.AddDatabaseDeveloperPageExceptionFilter();

            services.AddDefaultIdentity<ApplicationUser>(options =>
              {options.SignIn.RequireConfirmedAccount = true ; } )
                .AddEntityFrameworkStores<ApplicationDbContext>();

            services.AddIdentityServer()
                .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

            services.AddAuthentication()
                .AddIdentityServerJwt();

            services.AddControllersWithViews();
            services.AddRazorPages();

            // In production, the React files will be served from this directory
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/build";
            });
        }

当我阅读 Microsoft 文档时,services.AddAuthentication().AddIdentityServerJwt();它负责 /identity 区域路径中的所有请求。而且我们在 appsettings.json 中有这些身份服务器配置

"IdentityServer": {
    "Clients": {
      "project_name": {
        "Profile": "IdentityServerSPA"
      }
    }
  }

记录到 identityserver4 文档的经典架构是我们有一个客户端正在与身份服务器对话,并确保有关用户的一切都正常并检索他们的信息并然后登录......在这种情况下是 API 的令牌。如果您注意到 API 不是客户端,则它是某种对象和服务(如他们所说的资源)。这意味着,IDS(identityserver) 的实现最适合那些拥有可能是 MVC 应用程序的客户端的人,他们可能会使用一些 API 并且他们想要保护,因此 MVC 应用程序调用 IDS 来获取不记名令牌,它将使用它在首页中请求某些页面中的后端API。到目前为止,对于想要建立 SPA 的我来说,一切都是一场噩梦,但我没有 不想制作一个仅用于请求令牌的 mvc 应用程序(或者可以将 mvc 应用程序作为客户端然后创建 API 控制器,但我仍然需要配置单独的 IDS)。似乎微软不为 web API 和 spa 应用程序提供支持 asp .net 核心身份(单独),所以我们应该使用身份服务器。但是在我按照我所说的搭建一个 React 应用程序之后,他们似乎试图减少结合 API 应用程序和身份服务器的痛苦(我认为我错了一点,因为它们可能在不同的服务器主机范围上运行)。但很确定源代码在解决方案中只包含一个项目,在这种组合之后,我的问题是:但是在我按照我所说的搭建一个反应应用程序之后,似乎他们试图减少结合 API 应用程序和身份服务器的痛苦(我认为我错了一点,因为它们可能在不同的服务器主机范围上运行)。但很确定源代码在解决方案中只包含一个项目,在这种组合之后,我的问题是:但是在我按照我所说的搭建一个反应应用程序之后,似乎他们试图减少结合 API 应用程序和身份服务器的痛苦(我认为我错了一点,因为它们可能在不同的服务器主机范围上运行)。但很确定源代码在解决方案中只包含一个项目,在这种组合之后,我的问题是:

1.默认生成的SPA代码的架构是 什么我的意思是谁是身份服务器的客户端?在 appsettings 中 project_name 设置为客户端,我认为创建的应用程序 SPA 既是客户端又是 API 控制器?还有一件更重要的事情是与 IDS 集成的身份,它们都使用一个数据库上下文

2.这些组合的东西在哪里? /identity 区域实际上是 IDS,所以我如何自定义登录页面、注册页面、用户角色和声明...它们在应用程序源文件中不可见,并且看起来像 /identity 区域及其子控制器是 pre构建的 DLL 文件。 如果我只使用 .net 核心身份(用于创建用户和中间件的数据库 API 以及用于授权的注释)然后创建一个身份控制器来创建用户,通过 userManager 登录它们会发生什么......甚至可能吗?因为我只是看到了身份背景,而我从不尝试在行动中这样做。

标签: c#reactjsasp.net-coreidentityserver4identity

解决方案


推荐阅读