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
扩展时,会默认使用这个实现。
- 这个实现从数据库中获取