多层应用程序涉及不同级别的通信。 例如,浏览器与 Web API 通信以及 Web API 代表用户与其他 Web API 通信等。 为了启用安全通信,身份验证和授权协议可能需要额外的处理。
它几乎不可维护,因为 API 使用的任何变化都会转化为授权访问所涉及的逻辑的变化。 因此,将存在测试和部署瓶颈,尤其是在处理 微服务.
为了缓解这个问题, 安全令牌服务 (STS) 提供了一个中央存储库,可以卸载分布在应用程序不同组件之间的授权逻辑。 STS 主要负责颁发令牌和验证声明,以解决对资源的范围访问问题。
让我们看一下下图,以了解正在使用的安全令牌服务的总体思路。
身份服务器4 是一种常用的 STS .NET Core 实现 OpenID 连接和 OAuth 2.0 协议的应用程序。 让我们看一下下图,以了解正在使用的安全令牌服务的总体思路。
NCache 更多信息 NCache 使用 IdentityServer4 缓存键和数据概述
身份服务器与 NCache
IdentityServer4 API 提供了使用任何外部自定义存储的灵活性,无论是关系数据库还是 NoSQL 解决方案,文件系统,甚至是内存数据存储,例如 NCache. 为此,IdentityServer4 的作者已经实现 实体框架 (EF) 核心 对 IdentityServer4 的支持使得使用任何数据库作为 IdentityServer4 的存储介质变得非常容易 配置和操作数据.
NCache,是一个分布式的、可扩展的内存 键值存储,非常适合 IdentityServer4。 它可以通过以下任一方式与 IdentityServer 一起使用。
- NCache 可以作为一个 IdentityServer4 的缓存存储 配置和操作数据,以通过内存缓存加速操作并减少数据库命中。
- NCache 可以作为一个 配置和持久授权存储 通过消除必须从磁盘获取数据的瓶颈来进一步提高性能。 然后可以将缓存的内存内容定期保存到磁盘,从而大大减少获取数据的平均时间。
您还可以混合和匹配缓存和存储角色 NCache 例如,将其用作配置存储的缓存层和操作数据的独立存储。 所有这些都是使用 IIdentityServerBuilder 实现的 NCache ASP 期间使用的扩展方法.NET Core 依赖注入。
- 配置存储: 保存静态数据的存储,不会因此而改变。
- 运营店铺: 保存操作数据的存储,在该存储上执行操作并且更有可能被频繁修改。
它的好处是您可以将数据存储在内存中,从而产生更好更快的结果。 让我们慢慢深入了解它是如何完成的,但在开始之前需要注意一些先决条件。
NCache 更多信息 NCache 使用 IdentityServer4 缓存键和数据概述
先决条件
- .NET Core 3.0 和 3.1 SDK 和运行时。
- NCache Enterprise 5.0 SP1 或以后在您的服务器上运行。
- 参考 GitHub解决方案 获取有关正在使用的应用程序的信息。 在整个博客中,代码更改都是根据相同的应用程序进行解释的。
情景1: NCache 作为 In-Memory IdentityServer4 存储
您可以在使用时存储有关客户端、API 资源、身份资源等(配置)和/或持久授权和设备流代码等(操作)的信息 NCache 作为 IdentityServer 存储.
现在让我们看看在哪里 NCache 适合图片:
为了使用 NCache 对于配置和操作数据:
步骤1: 在 cs 在您的项目中,添加.UseStartupNCache>() 方法并在其中添加以下代码 创业公司Ncache.cs 文件中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); var builder = services.AddIdentityServer() .AddTestUsers(TestUsers.Users) .AddNCacheConfigurationStore(options => { options.CacheId = _configuration["CacheId"]; var serverList = _configuration["Servers"].Split(',') .Select(x => x.Trim()) .ToList() .Select(y => new NCacheServerInfo(y, 9800)) .ToList(); options.ConnectionOptions = new NCacheConnectionOptions { ServerList = serverList, EnableClientLogs = true, LogLevel = NCacheLogLevel.Debug }; }) //.. rest of the code } |
步骤2: 在 应用设置.json 文件,修改值 缓存标识 您正在使用的缓存名称的键。 此外,对于多 服务器 键,使用逗号分隔的一个或多个 IP 地址列表 NCache 服务器组成 NCache 簇。
1 2 3 4 |
{ "CacheId": "democache", "Servers": "20.200.20.45,20.200.20.50", } |
步骤3: 运行应用程序 IdentityServer、MvcClient、Api、JavaScriptClient 看怎么样 NCache 在确保用作配置和操作存储的演示缓存正在运行并且可以连接到 IdentityServer 示例应用程序之后,它作为 IdentityServer4 配置和操作存储运行。
情景2: NCache 作为 IdentityServer4 缓存实现
NCache的核心功能是缓存持久保存在数据源中的数据,以实现更快的访问和更好的性能。 虽然你可以使用 NCache 作为您的数据存储,您还可以使用 NCache 通过将配置和/或操作数据缓存在您的数据存储和应用程序之间 NCache 同时也将其保存在数据存储中。
让图来演示如何 NCache 与 IdentityServer4 一起用作缓存。
步骤1: 为了执行 NCache 作为配置存储,同时还将配置和操作数据保存在数据存储中,添加 使用启动>() 方法并在其中添加以下代码 启动EFCore.cs 文件中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public void ConfigureServices(IServiceCollection services) { ... var builder = services.AddIdentityServer() .AddTestUsers(TestUsers.Users) .AddNCacheCaching(options => { options.CacheId = _configuration["CacheId"]; var serverList = _configuration["Servers"].Split(',') .Select(x => x.Trim()) .ToList() .Select(y => new NCacheServerInfo(y, 9800)) .ToList(); options.ConnectionOptions = new NCacheConnectionOptions { ServerList = serverList }; options.DurationOfBreakInSeconds = 120; }); //.. rest of the code } |
步骤2: 在 应用设置.json 文件,修改值 缓存标识 您将使用的缓存名称的键。 此外,对于多 服务器 键,使用逗号分隔的一个或多个 IP 地址列表 NCache 服务器组成 NCache 簇。 此外,提供 SQL Server 的连接字符串。
1 2 3 4 5 6 7 8 |
{ "CacheId": "democache", "Servers": "20.200.20.45,20.200.20.50", "ConnectionStrings": { "db": "server=;database=IdentityServer4.EntityFramework;UserId=userid;Password=password;" } } |
步骤3: 运行应用程序 IdentityServer、MvcClient、Api、JavaScriptClient 看怎么样 NCache 作为配置存储、持久授权存储以及 IProfileService 默认实现的缓存机制运行。 确保用作配置存储和持久授权存储缓存的缓存正在运行并且可以连接到 身份服务器 示例应用程序。
结论
总而言之,IdentityServer 在应用程序中的每个网络跃点执行所有必要的身份验证,并且 NCache 非常适合保存配置和操作数据以便更快地访问。 不仅如此 NCache 也可以用作您的数据存储并将这两种数据存储在内存中,让您可以自由地摆脱任何其他数据源的应用程序。 您可以通过使用提供的扩展方法获得所有这些 NCache 很容易。