如何使Asp.NET Core MVC应用在授权重定向上使用外部URL?

赫卡里克

我正在寻找问题标题中所述问题的解决方案。更准确地说-我正在运行测试应用程序(asp.net core / mvc),并通过https://ngrok.com将其通过隧道传输到世界各地我为此使用的命令是:

ngrok.exe http -host-header =重写localhost:62274

“ ngrok.exe http”用于初始化ngrok,“-host-header = rewrite localhost:62274”更改标头以允许执行应用程序(因为IIS检查标头并阻止了其他任何标头)。

我遇到的问题是授权失败(来宾试图访问受限页面)之后,[Authorize]指向内部链接(例如“ http:// localhost:62274 / Account / Login ”)。不是故意的。
应用程序的视图提供的所有链接均正常运行(它们使用ngrok提供的地址前缀)。我必须修复Login / Register的returnUrl参数,但是它们现在可以正常工作。

我搜索该问题的答案已有2天了。如前所述,它是一个测试应用程序,我正在学习.net核心中的编程。限制是我不想编写自己的授权-这很容易导致我的经验不足,需要不断进行安全性更新,并且没有必要重新发明轮子,对吗?

问题发生在:

[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();
}
网步

更新1.(有关原始问题,请参阅下文)。

解决方案1:使其与IIS一起使用现在,使它与IIS一起使用。(不适用于IIS Express)。

  1. 我在本地iis的特定端口上发布站点。

  2. 我使用以下命令。

ngrok.exe http 8042(您选择的端口)

请确保您使用的上述命令未被您使用。在您的命令中,您使用了特殊的-host-header = rewrite选项。现在,当请求从iis移至Kerstel服务器时,此选项将重写主机值。该主机值用于构建登录URL和创建问题。

ngrok.exe http -host-header =重写localhost:62274

解决方案2:使它与IIS Express一起使用。

您仍然必须使用与我相同的命令来代替您的命令。

ngrok.exe http yourportnumber

现在,要使其与IIS Express一起使用,您必须转到解决方案的根文件夹。您将在那找到.vs文件夹。(它是隐藏的)。因此,您还必须启用查看隐藏文件夹的功能。

现在转到.vs-> Config-> applicationhost.config

打开此文件并搜索“站点”部分,它将类似于以下内容。(由于您必须更新绑定信息,因此我删除了许多代码)

<sites>          
            <site name="WebApplication2" id="4">                
                <bindings>
                    <binding protocol="http" bindingInformation="*:12619:localhost" />
                </bindings>
            </site>           
        </sites>

替换为(请参阅我用*替换localhost)

<sites>          
            <site name="WebApplication2" id="4">                
                <bindings>
                    <binding protocol="http" bindingInformation="*:12619:*" />
                </bindings>
            </site>           
        </sites>

注意:1.如果VS已经处于调试模式,则将其停止并重新启动。现在应该可以工作了。因为它对我有用。

  1. 之前在评论中,我认为它与MVC5兼容,但仅当您使用默认身份验证时才适用。如果使用Owin管道,并且在ngrok.exe开关中使用-host-header开关,则将得到相同的错误。

实际上,我想对此发表评论,但是它有点长,所以我被放在这里。这就是发生这种情况的原因。

  1. 这样做的真正原因是它无法正确构建url。https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication/AuthenticationHandler.cs

在上面的cs文件BuildRedirectUri中为其构建登录uri。

  1. 在上面的第二个原因,当您使用ngrok并遵守Request.Host始终是localhost:<>时,会产生此问题。(这是罪魁祸首)

  2. 我使用主机文件测试了其他方式,并且工作正常。Request.Host显示正确的主机名。

根据我的意见和较旧版本的MVC5,它应保留提供的ngrok主机名而不是localhost。我认为真正的问题是当请求从IIS移至Kestrel时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用ASP.NET MVC(或Core)检测和重定向无cookie会话?

来自分类Dev

当用户未被授权使用 ASP.NET Core 2.2 和 OIDC 时自动重定向到外部权限

来自分类Dev

如何在ASP.NET Core中获取用于登录重定向的当前应用程序相对URL

来自分类Dev

在ASP.NET Core MVC中具有多个索引视图时如何重定向

来自分类Dev

如何将视图重定向到主页-ASP.NET Core MVC

来自分类Dev

如何在ASP.NET Core应用中使用HttpClient

来自分类Dev

如何去除cookies asp.net core 授权

来自分类Dev

ASP.NET Core应用程序如何构建?

来自分类Dev

如何从Web API调用ASP.NET Core Web MVC

来自分类Dev

如何从ASP .NET Core MVC 1.0中的视图访问会话

来自分类Dev

如何调试ASP.NET Core MVC数据绑定?

来自分类Dev

如何从Web API调用ASP.NET Core Web MVC

来自分类Dev

如何使 ASP.NET Core MVC 路由生成相对?

来自分类Dev

ASP.NET Core-如何从URL获取参数

来自分类Dev

防止在启动后重定向 ASP.NET Core MVC 应用程序

来自分类Dev

使用MVC重定向到ASP.NET Core中的上一页URL-C#

来自分类Dev

如何在ASP.NET Core中使用jquery

来自分类Dev

如何使用ASP.NET Core显示错误

来自分类Dev

如何使用Jquery从Asp .Net Core消费Apis

来自分类Dev

如何使用Asp.Net Core依赖注入导出接口

来自分类Dev

在 ASP.NET Core 中,如何使用 sqlite

来自分类Dev

如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

来自分类Dev

向控制器添加[授权]未能重定向到“身份登录”路由。ASP.NET CORE 3.1 MVC

来自分类Dev

Asp.net核心授权重定向未发生

来自分类Dev

重定向时如何避免呈现Asp.net Core剃刀页面?

来自分类Dev

ASP.NET Core 3.1 Razor页面:如何自动从“索引”页面重定向到“登录”页面?

来自分类Dev

当 ASP.NET Core 2.2 项目出现特定异常时,如何重定向用户?

来自分类Dev

ASP.NET Core 如何根据布尔值将用户重定向到页面

来自分类Dev

如何使用 VSTS 部署(和运行).NET Core ASP.NET 应用程序?

Related 相关文章

  1. 1

    如何使用ASP.NET MVC(或Core)检测和重定向无cookie会话?

  2. 2

    当用户未被授权使用 ASP.NET Core 2.2 和 OIDC 时自动重定向到外部权限

  3. 3

    如何在ASP.NET Core中获取用于登录重定向的当前应用程序相对URL

  4. 4

    在ASP.NET Core MVC中具有多个索引视图时如何重定向

  5. 5

    如何将视图重定向到主页-ASP.NET Core MVC

  6. 6

    如何在ASP.NET Core应用中使用HttpClient

  7. 7

    如何去除cookies asp.net core 授权

  8. 8

    ASP.NET Core应用程序如何构建?

  9. 9

    如何从Web API调用ASP.NET Core Web MVC

  10. 10

    如何从ASP .NET Core MVC 1.0中的视图访问会话

  11. 11

    如何调试ASP.NET Core MVC数据绑定?

  12. 12

    如何从Web API调用ASP.NET Core Web MVC

  13. 13

    如何使 ASP.NET Core MVC 路由生成相对?

  14. 14

    ASP.NET Core-如何从URL获取参数

  15. 15

    防止在启动后重定向 ASP.NET Core MVC 应用程序

  16. 16

    使用MVC重定向到ASP.NET Core中的上一页URL-C#

  17. 17

    如何在ASP.NET Core中使用jquery

  18. 18

    如何使用ASP.NET Core显示错误

  19. 19

    如何使用Jquery从Asp .Net Core消费Apis

  20. 20

    如何使用Asp.Net Core依赖注入导出接口

  21. 21

    在 ASP.NET Core 中,如何使用 sqlite

  22. 22

    如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

  23. 23

    向控制器添加[授权]未能重定向到“身份登录”路由。ASP.NET CORE 3.1 MVC

  24. 24

    Asp.net核心授权重定向未发生

  25. 25

    重定向时如何避免呈现Asp.net Core剃刀页面?

  26. 26

    ASP.NET Core 3.1 Razor页面:如何自动从“索引”页面重定向到“登录”页面?

  27. 27

    当 ASP.NET Core 2.2 项目出现特定异常时,如何重定向用户?

  28. 28

    ASP.NET Core 如何根据布尔值将用户重定向到页面

  29. 29

    如何使用 VSTS 部署(和运行).NET Core ASP.NET 应用程序?

热门标签

归档