【问题标题】:Auth0 WebApi asp.net core setupAuth0 WebApi asp.net 核心设置
【发布时间】:2021-07-13 22:59:49
【问题描述】:

我正在尝试使用 auth0 服务实现 oauth 流程的基本版本。我遵循了基本设置并获取了不记名令牌,但由于某种原因我无法访问我的控制器。 这是我的启动课:

   namespace Webapi
{
    public class Startup
    {
        
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddControllers();
           
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.Authority = "https://groep5.eu.auth0.com/";
                options.Audience = "https://localhost:44346/home/";
            });
        }

        
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();
            app.UseAuthorization();
            app.UseAuthentication();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
            });
        }
    }
}

这是我的控制器:

namespace Webapi.Controllers
{
    public class HomeController : Controller
    {
        [Authorize]
        public string Leden()
        {
            return "retlok";
        }
        public string Test()
        {
            return "random tekst";
        }
    }
}

我的第一个想法是我的权限错误,但我已经通过多种方式添加了我的方法。 我已经完成了“leden”、“https://localhost:44346/home/leden”和“read:leden”。我的问题可能很简单,但我已经解决了太久,所以我认为在这个网站上问它更容易。

【问题讨论】:

  • 可能值得在这个问题上添加更多内容。首先,您可以访问控制器上的 Test() 操作吗?如果没有,您在浏览器的控制台和网络选项卡(在开发人员工具中)看到了什么?在没有该信息的情况下,我看不到任何 CORS 配置,因此可能值得从那里开始。
  • @DaveCluderay 我确信 CORS 不是解决方案的一部分。我试过添加它,据我所知它什么也没做。我可以访问测试,所以我确定路由没有问题。我已经修复了它,但我不知道它做了什么,但仍然感谢您的帮助。
  • 回过头来看,我注意到您的 UseAuthenticationUseAuthorization 呼叫以错误的方式切换。也许就是这样,但很高兴你还是成功了。在许多情况下,注入中间件的顺序很重要,MS 有一个页面记录了它们的推荐顺序:docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/…
  • @DaveCluderay 我不知道这很重要。事实证明你是对的。感谢您帮助我,因为我确信这将是未来项目中的一个问题。

标签: c# asp.net-core auth0


【解决方案1】:

感谢用户 Dave Cluderay,我找到了答案。事实证明,添加中间件的顺序很重要。所以 app.UseAuthorization(); 的顺序和 app.UseAuthentication();应该颠倒过来,我的配置方法应该是这样的:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();
        
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapDefaultControllerRoute();
        });
    }

【讨论】:

    【解决方案2】:

    代码对我来说看起来不错,您肯定配置有问题,请阅读 asp.net core web api 的 auth0 文档。 https://auth0.com/docs/quickstart/backend/aspnet-core-webapi/01-authorization 非常直接。

    【讨论】:

    • 我已按照文档进行操作,但由于某种原因,我的代码仍然无法正常工作。他们给我的示例项目有效,但我找不到破坏我的项目的东西。我一直在从示例项目中删除代码,以使其尽可能靠近我的项目,但在删除了我的项目没有的所有内容后,它仍然可以工作。所以我不知道它做了什么,但它现在可以工作了。
    猜你喜欢
    • 2020-09-23
    • 2018-04-27
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2016-08-11
    相关资源
    最近更新 更多