c# - 如何在 startup.cs 中添加 /.well-known/openid-configuration 路由以及控制器路由和角度路由?
问题描述
我正在使用 Identityserver4 创建登录服务器。我正在使用 ASP.net core 3.1 来提供功能,并使用 angular 9 项目来为登录/注册屏幕提供静态文件。从 .netcore 项目的 wwwroot 文件夹中提供 angular 项目。
为了确保我的角度路由与控制器路由一起正常工作,我在 Startup.cs 中添加了以下内容
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseCors(Constants.Constants.Policy);
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseIdentityServer();
app.UseWhen(x => !x.Request.Path.Value.StartsWith("/Account"), builder =>
{
builder.Use(async (context, next) => {
await next();
if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
{
context.Request.Path = "/index.html";
await next();
}
})
.UseDefaultFiles(new DefaultFilesOptions { DefaultFileNames = new List<string>{"index.html"}})
.UseStaticFiles();
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Account}/{action=Login}/{id?}");
});
}
这确保了当 url 包含http://localhost:port/Account/Login时,它将通过控制器路由提供服务。其余所有 URL 路径都将通过 Angular 提供。
当客户端应用程序尝试访问http://localhost:port/.well-known/openid-configuration url 以获取发现文档时,就会出现问题。由于 URL 不以“Account”开头,因此它是通过 Angular 提供的,即它被重定向到 index.html 页面。
如何将.well-known/openid-configuration路由添加到我的 Startup.cs 以便它返回发现文档?
从客户端应用程序访问 IdentityServer 时出现的错误是
我在 IdentityServer 网页上遇到的错误是
解决方案
我必须添加一个例外来路由 /.well-known 以及 /Account
app.UseWhen(x => !x.Request.Path.Value.StartsWith("/Account") && !x.Request.Path.Value.StartsWith("/.well-known/openid-configuration") , builder =>
{
builder.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
{
context.Request.Path = "/index.html";
await next();
}
})
.UseDefaultFiles(new DefaultFilesOptions { DefaultFileNames = new List<string> { "index.html" } })
.UseStaticFiles();
});
推荐阅读
- c# - ASP.NET Core 模拟服务仅在一个请求的范围内
- php - 如果客户购买了一些特定的产品,那么我想将其他条件放入其中
- java - Spring 自定义身份验证令牌从未 GCed
- java - 如何在 Android 上将位图图像转换为 TensorImage?
- shap - 获取使用 kNN 进行的预测的 SHAP 值
- database - INSERT INTO 错误和 PLS-00231 错误函数可能无法在 SQL 中使用
- javascript - 丢弃 child 会触发 parent 的“drop”事件侦听器。我想用特定于子的“drop”覆盖该事件侦听器
- python - 在 tensorflow 中实现 KL 预热:回调中的 tf.keras.backend.variable 在 epochs 上不稳定
- modelica - 通过从 Dymola 导出到 FMU,所有参数默认为“可调”,但应为“固定”
- python - Python tkinter - 自动单击 Treeview 中的选定项目