跨域访问


layout: docs-default

CORS

大部分IdentityServer的endpoint被Javascript通过Ajax调用,但是IdentityServer一般不会和这些客户端部署在一起。那么Cross-Origin Resource Sharing (CORS跨域访问)就必须认真处理。

跨域策略服务

IdentityServer3 允许托管程序实现ICorsPolicyService来决定跨域策略,这个服务需要在IdentityServerServiceFactory上注册.

ICorsPolicyService 上只有一个方法:

  • Task IsOriginAllowedAsync(string origin)
  • 返回true表示接受来自origin的请求, false 则拒绝.

我们可以实现一个判断逻辑来决定来自哪里的请求可以接受.

IdentityServer自带跨域实现

IdentityServer核心模块提供了两个实现:

  • DefaultCorsPolicyService
    • 如果跨域调用的网站是已知的,我们可以使用这个实现。在AllowedOrigins 属性填上所有的可接受的来源即可。
    • 也可以设置AllowAlltrue来接受所有的跨域请求。
  • InMemoryCorsPolicyService
    • 这个实现接受客户端列表。客户端对象把可信来源放在AllowedCorsOrigins属性中。
    • 当使用UseInMemoryClients扩展时,会默认使用这个实现。

IdentityServer3.EntityFramework还提供了一个跨域实现:

  • ClientConfigurationCorsPolicyService
    • 这个实现从数据库中获取Client对象,并使用这个Client对象的AllowedCorsOrigins 的属性来配置可信来源。
    • 当时用RegisterClientStoreRegisterConfigurationServices 扩展时,会默认使用这个实现。

你可能感兴趣的:(跨域访问)