我正在寻找问题标题中所述问题的解决方案。更准确地说 - 我正在运行测试应用程序 (asp.net core/mvc) 并使用https://ngrok.com将其通过隧道在全球范围内访问。我为此使用的命令是:
ngrok.exe http -host-header=rewrite localhost:62274
“ngrok.exe http”用于初始化 ngrok,“-host-header=rewrite localhost:62274”更改标头以允许执行应用程序(因为 IIS 检查标头并阻止任何其他标头)。
我遇到的问题是授权失败后(客人试图访问受限页面)[Authorize] 指向内部链接(例如“ http://localhost:62274/Account/Login ”)。这不是故意的。
应用程序视图提供的所有链接都正常工作(它们使用 ngrok 提供的地址前缀)。我必须修复登录/注册的 returnUrl 参数,但它们现在可以正常工作。
我现在搜索了 2 天来寻找该问题的答案。如前所述,它是我正在制作的用于学习.net core 编程的测试应用程序。限制是我不想编写自己的授权- 这很容易导致我缺乏经验,它需要不断的安全更新,并且重新发明轮子没有意义,对吧?
问题发生在:
[Authorize("Admin")]
public async Task<IActionResult> DeleteDItem(int? id)
而不是重定向到: http://<8_random_characters>.ngrok.io/Account/Login 它指向:http://localhost:62274/Account/Login
更多细节(这是我在这里写的第一个问题,所以我希望它有点正确):
-它是一个使用 MVS2015 的默认“个人用户身份验证”的 ASP.NET Core Web 应用程序,
-相关 project.json 信息:
"dependencies": {
"BundlerMinifier.Core": "2.1.258",
"Microsoft.ApplicationInsights.AspNetCore": "1.0.0",
"Microsoft.AspNet.Authentication.Google": "1.0.0-rc1-final",
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
"Microsoft.AspNetCore.Authentication.Facebook": "1.0.0",
"Microsoft.AspNetCore.Authentication.Google": "1.0.0",
"Microsoft.AspNetCore.Authorization": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
...
"Npgsql.EntityFrameworkCore.PostgreSQL": "1.0.0"
- Startup.cs 的相关部分:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", policy =>
policy.RequireAuthenticatedUser());
});
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
app.UseIdentity();
}