bar*_*oma 2 c# asp.net-core identityserver4
我正在使用 isentittyserver4 并且我授权了我的控制器或操作。
[Authorize(Roles ="app.admin")]
[Route("products")]
public class ProductsController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)
我的令牌包含角色。我可以访问User对象属性中的角色。
但是如果我发送带有不包含app.admin但包含的令牌的请求app.viewer
但请求响应是403禁止。但应该是401未经授权。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = Configuration.GetValue<string>("Authority");
options.ApiName = Configuration.GetValue<string>("ApiName");
options.RequireHttpsMetadata = false;
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.UseMvc();
}
}
Run Code Online (Sandbox Code Playgroud)
它应该是 403,或者至少是 401 以外的任何值。
这就是原因。
假设管道返回 401。处理程序会将请求视为未经身份验证,并将触发 SSO 流。但是,用户已经在身份提供者端进行了身份验证。然后,身份提供者将默默地返回相同/新的令牌,并且流程将返回到应用程序。根据实际返回地址,会发生以下两种情况之一:
返回地址始终是应用程序的主页 - 用户会注意到他们被重定向到主页,但他们认为自己已经经过身份验证,这种情况不应该发生。您将收到有关应用程序中可能存在错误的报告。
返回地址与触发 SSO 流程的地址完全相同。但我们已经讨论过如果返回 401,它会返回到身份提供者。然后,浏览器陷入IdP 和您的应用程序之间的无限重定向循环中。您将收到严重错误的报告。
如果授权返回403 而不是 401,您可以在应用程序端的管道末端捕获它(我相信一个简单的操作过滤器应该完成假设您检查 中的状态的工作OnActionExecuted)并以适当的方式处理,例如,返回由于用户缺乏所需权限而无法显示所请求资源的原因的信息。
| 归档时间: |
|
| 查看次数: |
3843 次 |
| 最近记录: |