第41章 CORS - Identity Server 4 中文文档(v1.0.0)
第41章 cors
identityserver中的许多端点将通过基于javascript的客户端的ajax调用进行访问。鉴于identityserver最有可能托管在与这些客户端不同的源上,这意味着需要配置(cors)。
41.1 基于客户端的cors配置
配置cors的一种方法是在客户端配置上使用allowedcorsorigins
该集合。只需将客户端的原点添加到集合中,identityserver中的默认配置将查询这些值以允许来自源的跨源调用。
注意
配置cors时,请务必使用原点(不是url)。例如:https://foo:123/
是一个url,而是https://foo:123
一个原点。
如果您使用我们提供的“内存中”或基于ef的客户端配置,则将使用此默认cors实现。如果您定义自己的iclientstore
,那么您将需要实现自己的自定义cors策略服务(见下文)。
41.2 自定义cors策略服务
identityserver允许托管应用程序实现icorspolicyservice
完全控制cors策略。
要实现单一的方法是:task<bool> isoriginallowedasync(string origin)
。如果允许原点则返回true,否则返回false
实现后,只需在di中注册实现,然后identityserver将使用您的自定义实现。
41.2.1 defaultcorspolicyservice
如果您只是希望对一组允许的原点进行硬编码,那么您可以使用一个预先构建icorspolicyservice
的实现调用defaultcorspolicyservice
。这将被配置为di单例,并以其硬编码的allowedorigins
收集,或设置标志allowall
为true允许所有的源点。例如,在configureservices
:
var cors = new defaultcorspolicyservice(_loggerfactory.createlogger<defaultcorspolicyservice>()) { allowedorigins = { "https://foo", "https://bar" } }; services.addsingleton<icorspolicyservice>(cors);
注意
allowall谨慎使用。
41.3 将identityserver的cors策略与asp.net core的cors策略混合
identityserver使用asp.net core的cors中间件来提供其cors实现。托管identityserver的应用程序可能还需要cors用于自己的自定义端点。通常,两者应该在同一个应用程序中一起工作。
您的代码应使用asp.net core中记录的cors功能,而不考虑identityserver。这意味着您应该定义策略并正常注册中间件。如果您的应用程序在configureservices
中定义了策略,那么这些策略应继续在您使用它们的相同位置(在您配置cors中间件的地方或在enablecors
控制器代码中使用mvc 属性的位置)。相反,如果您使用cors中间件(通过策略构建器回调)定义内联策略,那么它也应该继续正常工作。
您使用asp.net core cors服务与identityserver之间可能存在冲突的一种情况是您决定创建自定义icorspolicyprovider
。鉴于asp.net core的cors服务和中间件的设计,identityserver实现了自己的自定义icorspolicyprovider
并将其注册到di系统中。幸运的是,identityserver实现旨在使用装饰器模式来包装icorspolicyprovider
已在di中注册的任何现有模式 。这意味着你也可以实现icorspolicyprovider
,但它只需要在di中的identityserver之前注册(例如,在configureservices
)。
推荐阅读
-
第29章 保护API - Identity Server 4 中文文档(v1.0.0)
-
第27章 联合网关 - Identity Server 4 中文文档(v1.0.0)
-
第26章 联合注销 - Identity Server 4 中文文档(v1.0.0)
-
第25章 退出外部身份提供商 - Identity Server 4 中文文档(v1.0.0)
-
第23章 Windows身份验证 - Identity Server 4 中文文档(v1.0.0)
-
第28章 确认(Consent) - Identity Server 4 中文文档(v1.0.0)
-
第63章 ASP.NET Identity 支持 - Identity Server 4 中文文档(v1.0.0)
-
第41章 CORS - Identity Server 4 中文文档(v1.0.0)
-
第38章 刷新令牌 - Identity Server 4 中文文档(v1.0.0)
-
第65章 博客帖子 - Identity Server 4 中文文档(v1.0.0)