跨域请求被阻止:CORS 标头“Access-Control-Allow-Origin”缺失
Posted
技术标签:
【中文标题】跨域请求被阻止:CORS 标头“Access-Control-Allow-Origin”缺失【英文标题】:Cross-Origin Request Blocked: CORS header 'Access-Control-Allow-Origin' missing 【发布时间】:2015-10-01 18:33:50 【问题描述】:使用 Identity Server 3 我正在尝试按照 documentation 配置 CORS。当我执行GET
请求时,我可以看到在 Fiddler 中捕获的响应是正确的并且缺少 Access-Control-Allow-Origin 标头。
这是用于设置IdentityServerOptions
的代码:
public void Configuration(IAppBuilder app)
var factory = InMemoryFactory.Create(
clients: Clients.Get(),
scopes: Scopes.Get());
var viewOptions = new DefaultViewServiceOptions();
viewOptions.Stylesheets.Add("/Content/site.css");
viewOptions.Scripts.Add("/Content/logon.js");
viewOptions.CacheViews = false;
factory.ConfigureDefaultViewService(viewOptions);
// This is where the CORS policy service is configured.
var corsPolicyService = new DefaultCorsPolicyService();
corsPolicyService.AllowAll = true;
factory.CorsPolicyService = new Registration<ICorsPolicyService>(corsPolicyService);
var userService = new LocalRegistrationUserService();
factory.UserService = new Registration<IUserService>(resolver => userService);
var options = new IdentityServerOptions
SiteName = "IdentityServer",
SigningCertificate = this.certificateProvider.Certificate,
Factory = factory,
RequireSsl = true,
// This is deprecated, but should still work according to the documentation.
// However using or not using it makes no change.
// CorsPolicy = CorsPolicy.AllowAll,
ProtocolLogoutUrls = logoutUrls,
AuthenticationOptions = new AuthenticationOptions()
EnableSignOutPrompt = false,
EnablePostSignOutAutoRedirect = true,
PostSignOutAutoRedirectDelay = 5,
,
;
app.Map("/core", idsrvApp =>
idsrvApp.UseIdentityServer(options);
);
如果我随后从其他站点发出简单的GET
请求,我得到的响应如下:
HTTP/1.1 302 Found
Content-Length: 0
Location: https://federation.example.com/core/login?signin=2ce0b4f...71313af
Server: Microsoft-IIS/8.5
Set-Cookie: SignInMessage.2ce0b4f...A1D5NkPJQ; path=/core; secure; HttpOnly
X-Powered-By: ASP.NET
Date: Mon, 13 Jul 2015 12:00:00 GMT
为什么没有应用 Access-Control-Allow-Origin 标头?
【问题讨论】:
【参考方案1】:似乎在 Identity Server 3 中正确设置了 CORS 策略服务,但所请求的路径明确不可用通过不同的服务器。
由日志表中的错误标识的请求路径是:
对路径提出的 CORS 请求:/connect/authorize from origin: null 但由于 CORS 路径无效而被拒绝
我认为这是作为一种额外的安全措施,以防止恶意系统在未经用户同意的情况下登录用户。
因此,唯一可以调用此受保护路径的系统将在工厂的 Client.RedirectUris
中定义(对于隐式流)。
【讨论】:
我没有时间做出完整的回复,但我可以确认我正在使用 IdS3,没有Access-Control-Allow-Origin
问题。查看示例存储库中的 JSImplicitClient 示例以获取指导。我一直在遇到Access-Control-Allow-Methods
问题,但这不是你问的问题。以上是关于跨域请求被阻止:CORS 标头“Access-Control-Allow-Origin”缺失的主要内容,如果未能解决你的问题,请参考以下文章
跨域请求被阻止:& 原因:缺少 CORS 标头“Access-Control-Allow-Origin”
跨域请求被阻止:同源策略不允许读取远程资源,CORS 标头中缺少令牌“缓存控制”