IdentityServer Topics(1)- 启动说明

启动

IdentityServer的启动是中间件和服务的组合来实现的。 所有配置都在你的启动类(Startup.cs)中完成。

配置服务

通过以下方式调用将IdentityServer服务添加到DI系统:

public void ConfigureServices(IServiceCollection services)
{
    var builder = services.AddIdentityServer();
}

这将返回一个生成器对象,而这个对象又有一些方便的方法来连接其他的服务。

密钥

  • AddSigningCredential 添加一个签名密钥服务,该服务将指定的密钥提供给各种令牌创建/验证服务。 您可以传入X509Certificate2SigningCredential或对证书存储区中证书的引用。
  • AddDeveloperSigningCredential 在启动时创建临时密钥。 这是仅用于开发场景,当您没有证书使用。 生成的密钥将被保存到文件系统,以便在服务器重新启动之间保持稳定(可以通过传递false来禁用)。 这解决了在开发期间client / api元数据缓存不同步的问题。
  • AddValidationKey 添加验证令牌的密钥。 它们将被内部令牌验证器使用,并将显示在发现文档中。 您可以传入X509Certificate2SigningCredential或对证书存储区中证书的引用。 这对于关键的转换场景很有用。

内存存储配置

各种“in-memory“配置API允许从配置对象的内存列表配置IdentityServer。 这些“in-memory”的集合可以在宿主应用程序中进行硬编码,也可以从配置文件或数据库动态加载。 但是,在设计时,只有托管应用程序启动时才会创建这些集合。

使用这些配置API可用于原型设计,开发和/或测试时不需要在运行时动态查询配置数据的数据库。 如果配置很少改变,这种配置方式也可能适用于生产方案,或者如果必须更改值,则需要重新启动应用程序并不方便。

  • AddInMemoryClients 添加基于IClientStoreICorsPolicyService的内存集合注册实现,以注册客户端配置对象。
  • AddInMemoryIdentityResources 添加基于IResourceStoreIdentityResource的内存集合注册实现,以注册身份验证资源。
  • AddInMemoryApiResources 添加基于IResourceStoreApiResource的内存集合注册实现,以注册API资源。

测试存储

TestUser类在IdentityServer中模拟用户,凭据和声明。 TestUser的使用与使用“in-memory”存储类似,因为它适用于原型开发和/或测试。 生产中不推荐使用TestUser

  • AddTestUsers 基于TestUserStoreTestUser对象的集合注册实现。 还注册IProfileServiceIResourceOwnerPasswordValidator的实现。

额外服务

  • AddExtensionGrantValidator 添加用于扩展授权的IExtensionGrantValidator实现。
  • AddSecretParser 添加用于解析客户端或API资源凭证的ISecretParser实现。
  • AddSecretValidator 添加ISecretValidator实现,以针对凭证存储验证客户端或API资源凭证。
  • AddResourceOwnerValidator 添加IResourceOwnerPasswordValidator`实现,用于验证资源所有者密码凭据授权类型的用户凭证。
  • AddProfileService 添加IProfileService以实现连接到您的自定义用户配置文件存储。DefaultProfileService`类提供了默认实现,它依靠身份验证cookie作为唯一的令牌发放源。
  • AddAuthorizeInteractionResponseGenerator 添加IAuthorizeInteractionResponseGenerator实现来在授权端点定制逻辑,以便显示用户错误,登录,同意或任何其他自定义页面的UI。 AuthorizeInteractionResponseGenerator类提供了一个默认的实现,因此如果需要增加现有的行为,可以考虑从这个现有的类派生。
  • AddCustomAuthorizeRequestValidator 添加ICustomAuthorizeRequestValidator实现,以在授权端点定制请求参数验证。
  • AddCustomTokenRequestValidator 添加ICustomTokenRequestValidator实现来定制令牌端点处的请求参数验证。
  • AddRedirectUriValidator 添加IRedirectUriValidator实现来自定义重定向URI验证。
  • AddAppAuthRedirectUriValidator 添加一个“AppAuth”(OAuth 2.0 for Native Apps)兼容的重定向URI验证器(进行严格的验证,但也允许随机端口为http://127.0.0.1)。
  • AddJwtBearerClientAuthentication 使用JWT对客户机认证的支持。

缓存

客户端和资源配置数据经常被IdentityServer使用。 如果从数据库或其他外部存储装载此数据,那么频繁地重新加载相同的数据代价可能是昂贵的。

  • AddInMemoryCaching 要使用下面描述的任何缓存,必须在DI中注册ICache的实现。 此API注册基于ASP.NET Core的ICache 的MemoryCache默认内存缓存实现。
  • AddClientStoreCache 注册一个IClientStore装饰器实现,它将维护客户端配置对象的内存缓存。 缓存持续时间可以在IdentityServerOptions上的缓存配置选项上配置。
  • AddResourceStoreCache 注册一个IResourceStore装饰器实现,它将维护IdentityResourceApiResource配置对象的内存缓存。 缓存持续时间可以在IdentityServerOptions上的缓存配置选项上配置。
  • AddCorsPolicyCache 注册一个ICorsPolicyService装饰器实现,它将维护一个CORS策略服务评估结果的内存缓存。 缓存持续时间可以在IdentityServerOptions上的缓存配置选项上配置。

可以进一步定制缓存: 默认缓存依赖于ICache实现。 如果您希望自定义特定配置对象的缓存行为,则可以在依赖注入系统中替换此实现。

ICache<T>的默认实现依赖于.NET提供的IMemoryCache接口(和MemoryCache实现)。 如果您希望自定义内存中的缓存行为,则可以替换依赖注入系统中的IMemoryCache实现。

配置中间件

您需要通过以下方式调用将IdentityServer添加到管道中:

public void Configure(IApplicationBuilder app)
{
    app.UseIdentityServer();
}

UseIdentityServer包含对UseAuthentication的调用,所以没有必要同时调用这两个。

中间件没有额外的配置。

请注意,添加顺序在管道配置中很重要。 例如,您需要在添加MVC中间件之前添加IdentitySever。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程软文

JConsole和JVisualJVM的入门

最近公司有一个all-in-one的项目一直会出现网络异常的问题,目前通过各方面判断是由于线程的问题,引起mysql线程问题又有可能跟定时任务,长连接,另外还有...

392
来自专栏IT技术精选文摘

为最佳性能调优 Nginx

通常来说,一个优化良好的 Linux 服务器可以达到 500,000 – 600,000 次/秒 的请求处理性能,然而我的 Nginx 服务器可以稳定地达到 9...

4495
来自专栏A周立SpringCloud

Spring Cloud Edgware新特性之四:Zuul routes端点功能增强

Spring Cloud是当前炙手可热的微服务开发框架。它的功能强大,组件丰富,设计优雅。目前Spring Cloud还在不断发展之中。 Spring Clou...

3538
来自专栏小白安全

sqlmap之POST登陆框注入方式一

注入方式一: 1.用Burp抓包,然后保存抓取到的内容。例如:保存为post.txt,然后把它放至某个目录下 ? 2.列数据库: sqlma...

3716
来自专栏晨星先生的自留地

DNS(下)之域传送漏洞

1993
来自专栏喵了个咪的博客空间

[喵咪MQ(2)]RabbitMQ单机模式使用

[喵咪MQ(2)]RabbitMQ单机模式使用 ? 哈喽!本周我们又见面了,今天呢我们接着说MQ软件RabbitMQ的故事,在上小节以及成功的安装了Rabbit...

2635
来自专栏java思维导图

针对nginx,我们来具体聊聊正向代理与反向代理区别

所谓代理服务器就是位于发起请求的客户端与原始服务器端之间的一台跳板服务器,正向代理可以隐藏客户端,反向代理可以隐藏原始服务器。

961
来自专栏https://www.cnblogs.com/L

【Dubbo篇】--Dubbo框架的使用

Provider: 提供者.发布服务的项目. Registry: 注册中心.所有提供者必须去注册中心注册自己所有能发布的服务. Consumer: 消费者.调用...

1531
来自专栏陈树义

MyCat 入门:漫谈 MyCat 配置系统

《MyCat 启蒙:分布式系统的数据库架构演变》中,我们通过一个项目从零到百万级访问的变化,展示了这个过程中的数据层架构变化。其中说到了数据层架构变化所带来的...

3394
来自专栏小小挖掘机

利用虚拟机练手Scrapy分布式爬虫!

前几天在公司电脑上装了几台服务器,好多想尝试的东西,今天,参照崔庆才老师的爬虫实战课程,实践了一下分布式爬虫,并没有之前想象的那么神秘,其实非常的简单,相信你看...

2823

扫码关注云+社区