layout: docs-default
CORS
大部分IdentityServer的endpoint被Javascript通过Ajax调用,但是IdentityServer一般不会和这些客户端部署在一起。那么Cross-Origin Resource Sharing (CORS跨域访问)就必须认真处理。
跨域策略服务
IdentityServer3 允许托管程序实现ICorsPolicyService来决定跨域策略,这个服务需要在IdentityServerServiceFactory上注册.
ICorsPolicyService 上只有一个方法:
Task<bool> IsOriginAllowedAsync(string origin)- 返回true表示接受来自
origin的请求,false则拒绝.
我们可以实现一个判断逻辑来决定来自哪里的请求可以接受.
IdentityServer自带跨域实现
IdentityServer核心模块提供了两个实现:
-
DefaultCorsPolicyService- 如果跨域调用的网站是已知的,我们可以使用这个实现。在
AllowedOrigins属性填上所有的可接受的来源即可。 - 也可以设置
AllowAll为true来接受所有的跨域请求。
- 如果跨域调用的网站是已知的,我们可以使用这个实现。在
-
InMemoryCorsPolicyService- 这个实现接受客户端列表。客户端对象把可信来源放在
AllowedCorsOrigins属性中。 - 当使用
UseInMemoryClients扩展时,会默认使用这个实现。
- 这个实现接受客户端列表。客户端对象把可信来源放在
IdentityServer3.EntityFramework还提供了一个跨域实现:
-
ClientConfigurationCorsPolicyService- 这个实现从数据库中获取
Client对象,并使用这个Client对象的AllowedCorsOrigins的属性来配置可信来源。 - 当时用
RegisterClientStore或RegisterConfigurationServices扩展时,会默认使用这个实现。
- 这个实现从数据库中获取








网友评论