Auth0 WebApi asp.net 核心设置
Auth0 WebApi asp.net core setup
我正在尝试使用 auth0 服务实现基本版本的 oauth 流程。我遵循了基本设置并获取了不记名令牌,但由于某种原因我无法访问我的控制器。
这是我的创业公司 class:
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。
我完成了“leden”、“https://localhost:44346/home/leden”和“read:leden”。我的问题可能很简单,但我已经解决这个问题太久了,所以我觉得在这个网站上提问更容易。
代码对我来说看起来不错,您肯定配置有误,请阅读 asp.net 核心网络 api 的 auth0 文档。 https://auth0.com/docs/quickstart/backend/aspnet-core-webapi/01-authorization 非常直接。
感谢用户 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();
});
}
我正在尝试使用 auth0 服务实现基本版本的 oauth 流程。我遵循了基本设置并获取了不记名令牌,但由于某种原因我无法访问我的控制器。 这是我的创业公司 class:
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。 我完成了“leden”、“https://localhost:44346/home/leden”和“read:leden”。我的问题可能很简单,但我已经解决这个问题太久了,所以我觉得在这个网站上提问更容易。
代码对我来说看起来不错,您肯定配置有误,请阅读 asp.net 核心网络 api 的 auth0 文档。 https://auth0.com/docs/quickstart/backend/aspnet-core-webapi/01-authorization 非常直接。
感谢用户 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();
});
}