CORS
IdentityServer 的许多端点在 JavaScript 中都需要通过 Ajax 调用来访问。由于 IdentityServer 很可能和客户端部署在不同的源上,这就意味着 Cross-Origin Resource Sharing (CORS) 将会是一个问题。
Cors Policy Service
IdentityServer3 允许宿主应用实现 ICorsPolicyService 来决定 CORS 策略。这个服务注册在 IdentityServerServiceFactory 。
ICorsPolicyService 只有一个方法:
Task<bool> IsOriginAllowedAsync(string origin)- 如果允许
origin则返回true,否则为false。
你对此也可以创建自定义的实现。
已有的实现 (Provided implementations)
IdentityServer 核心部分提供了两个实现:
DefaultCorsPolicyService- 如果允许的源的列表是固定的并且在应用启动的时候就是已知的,那么就可以使用这个实现。
AllowedOrigins属性是一个集合,可以通过允许的源的列表来配置。 - 也有一个
AllowAll属性,如果允许所有的源就可以将其设为true。
- 如果允许的源的列表是固定的并且在应用启动的时候就是已知的,那么就可以使用这个实现。
InMemoryCorsPolicyService- 这个实现将
Client对象列表作为构造函数的参数。允许的源是通过Client对象的AllowedCorsOrigins属性来配置的。 - 如果使用
UseInMemoryClients扩展方法,那么会自动使用此实现。
- 这个实现将
最后一个实现是由 IdentityServer3.EntityFramework 提供的:
ClientConfigurationCorsPolicyService- 这个实现根据存储在数据库中
Client对象的AllowedCorsOrigins属性获取允许的源的列表。 - 如果使用
RegisterClientStore或者RegisterConfigurationServices扩展方法会自动使用此实现。
- 这个实现根据存储在数据库中