layout: docs-default
CORS
大部分IdentityServer的endpoint被Javascript通過Ajax調(diào)用摸航,但是IdentityServer一般不會和這些客戶端部署在一起枕荞。那么Cross-Origin Resource Sharing (CORS跨域訪問)就必須認真處理。
跨域策略服務
IdentityServer3 允許托管程序?qū)崿F(xiàn)ICorsPolicyService
來決定跨域策略易桃,這個服務需要在IdentityServerServiceFactory
上注冊.
ICorsPolicyService
上只有一個方法:
Task<bool> IsOriginAllowedAsync(string origin)
- 返回true表示接受來自
origin
的請求,false
則拒絕.
我們可以實現(xiàn)一個判斷邏輯來決定來自哪里的請求可以接受.
IdentityServer自帶跨域?qū)崿F(xiàn)
IdentityServer核心模塊提供了兩個實現(xiàn):
-
DefaultCorsPolicyService
- 如果跨域調(diào)用的網(wǎng)站是已知的,我們可以使用這個實現(xiàn)。在
AllowedOrigins
屬性填上所有的可接受的來源即可兽泣。 - 也可以設置
AllowAll
為true
來接受所有的跨域請求。
- 如果跨域調(diào)用的網(wǎng)站是已知的,我們可以使用這個實現(xiàn)。在
-
InMemoryCorsPolicyService
- 這個實現(xiàn)接受客戶端列表诉位∑锿眩客戶端對象把可信來源放在
AllowedCorsOrigins
屬性中。 - 當使用
UseInMemoryClients
擴展時不从,會默認使用這個實現(xiàn)惜姐。
- 這個實現(xiàn)接受客戶端列表诉位∑锿眩客戶端對象把可信來源放在
IdentityServer3.EntityFramework還提供了一個跨域?qū)崿F(xiàn):
-
ClientConfigurationCorsPolicyService
- 這個實現(xiàn)從數(shù)據(jù)庫中獲取
Client
對象,并使用這個Client
對象的AllowedCorsOrigins
的屬性來配置可信來源椿息。 - 當時用
RegisterClientStore
或RegisterConfigurationServices
擴展時歹袁,會默認使用這個實現(xiàn)。
- 這個實現(xiàn)從數(shù)據(jù)庫中獲取