IdentityServer 4 中的 CORS 问题
Posted
技术标签:
【中文标题】IdentityServer 4 中的 CORS 问题【英文标题】:CORS issue in IdentityServer 4 【发布时间】:2020-11-04 15:34:47 【问题描述】:我使用 IdentityServer 4 作为我的应用程序的 oauth (Reactjs) 我在端口 http://localhost:5000 上运行 Identityserver,在 http://localhost:3000 上运行 reactjs 应用程序。我已经尝试通过以下代码为我的 identityserver4 使用 CORS。
public void ConfigureServices(IServiceCollection services)
services.AddIdentityServer(options =>
options.Events.RaiseSuccessEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseErrorEvents = true;
)
.AddClientStore<ClientStore>()
//.AddInMemoryApiResources(Config.GetApiResources())
.AddResourceStore<ResourceStore>()
//.AddInMemoryClients(Config.GetClients())
.AddCustomUserStore()
.AddCertificateFromFile();
services.AddCors(options =>
options.AddPolicy("CorsPolicy",
builder => builder.WithOrigins( "http://localhost:3000/")
.AllowAnyMethod()
.AllowAnyHeader());
);
public void Configure(IApplicationBuilder app, IWebHostEnvironment environment)
app.UseForwardedHeaders();
if (environment.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseCors("CorsPolicy");
//app.UseCors("default");
app.UseIdentityServer();
app.UseStaticFiles();
// uncomment, if you want to add an MVC-based UI
app.UseMvcWithDefaultRoute();
即使我在 WithOrigins() 中添加了 localhost:3000,当我尝试使用 axios 从 react app 发出请求时,我收到以下阻塞错误。
谁能帮我知道我做错了什么。我需要我的应用程序只允许一些来源列表(应用程序) 谢谢
【问题讨论】:
您能否发布整个 Startup.cs,因为中间件的顺序也很重要? 尝试只使用 AllowAnyOrigin() 而不使用 WithOrigins("localhost:3000/") @zhuber 我已经更新了代码你现在可以看到订单了 @foadabd 我只希望 localhost:3000 访问身份服务器,因此 AllowAnyOrigin() 对我不起作用。 @p.durgashankar 好的尝试只使用 WithOrigins("localhost:3000/") 没有 AllowAnyOrigin() 并且可能需要 AllowCredentials() 【参考方案1】:这可能是因为尾部斜线,这在the documentation 中有所提及。
注意:指定的 URL 不能包含尾部斜杠 (/)。如果 URL 以 / 结尾,则比较返回 false 并且不返回任何标头。
尝试使用http://localhost:3000
而不是http://localhost:3000/
。
我还质疑.AllowAnyOrigin()
和.WithOrigins()
的用法。仅使用 .WithOrigins()
即可实现您想要实现的目标。
【讨论】:
删除斜杠后它正在工作:) 谢谢你拯救了我的一天【参考方案2】:如果您要向另一个域发送请求,请尝试从您的身份服务器而不是 react.js 应用程序发送 http 请求。我遇到了类似的问题,但我只是将我的 API 用作代理,它运行良好。
【讨论】:
以上是关于IdentityServer 4 中的 CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章
IdentityServer4中自定义控制器和CustomClientStore的CORS问题
在 IdentityServer3 中处理 CORS 之前发送的飞行前 OPTIONS 请求
路径不适用于 Blazor 中允许的 IdentityServer CORS 端点,但适用于 Postman
Cors Policy 问题 Blazor WASM、Web API 和 Identity Server 4 和 IIS