Top*_*don 8 .net unauthorized custom-authentication asp.net-core
我已经实现了自己的自定义身份验证中间件和处理程序,并在应用启动时配置了它们.这一切都很好.
在我的自定义auth处理程序中,我已经覆盖了HandleAuthenticateAsync()以执行我自己的自定义身份验证,我还重写了HandleUnauthorizedAsync()以便将用户重定向到登录页面,但是这不会被调用.
浏览器在响应中收到401(未授权).我期待调用我的HandleUnauthorizedAsync().
我在这里没有正确理解管道吗?
谢谢
mih*_*ins 12
user1859022 对我有帮助,但我不想为每个[Authorize]
. 并且指定一开始DefaultAuthenticateScheme
也不起作用。
我的错误有点愚蠢。我有两个app.UseAuthorization()
和app.UseAuthentication()
当然的顺序是错误的。正确的版本是
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints => endpoints.MapControllers());
}
Run Code Online (Sandbox Code Playgroud)
所以请确保在之前UseAuthentication
调用。 UseAuthorization
在我的情况下,未调用我的处理程序的原因AuthenticationScheme
是未选择my 作为默认值。我必须将其包括在我的Authorize
属性中,如下所示:
[HttpGet]
[Authorize(AuthenticationSchemes= "MyAuth")]
public IEnumerable<string> Get()
{
...
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句:该AutomaticChallenge
选项似乎已被删除.net core 2.0
上述解决方案对我也有效,我可以使用以下代码段对其进行改进,然后无需在[Authorize]
属性中指定身份验证方案名称。在AddAuthentication
之前调用方法很重要AddMvc
。
public void ConfigureServices(IServiceCollection services)
{
//must be placed before the AddMvc call
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = "MyAuth";
options.DefaultChallengeScheme = "MyAuth";
})
.AddCustomAuth(o => { });
services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1354 次 |
最近记录: |