据我所知,有许多错误源,我们必须处理。
如果你试图登录(挑战)的第一件事将发生的是
HandleChallengeAsyncInternal
方法,它将尝试从您的identity server下载发现文档。
对于这个初始请求,没有错误处理,因此您需要在这里做的是在请求管道中的自定义ErrorHandlerMiddleware中捕获该异常,并从该代码中获取异常,然后将用户重定向到合适的“无法登录错误页”。
app.UseExceptionHandler(new ExceptionHandlerOptions
{
ExceptionHandler = new OAuthExceptionMiddleware(env).Invoke
});
然后检查源代码是否来自IdentiytModel,如果是,则重定向到其他页面,如以下示例代码:
public class OAuthExceptionMiddleware
{
private readonly IWebHostEnvironment _environment;
public OAuthExceptionMiddleware(IWebHostEnvironment environment)
{
_environment = environment;
}
public async Task Invoke(HttpContext context)
{
var ex = context.Features.Get<IExceptionHandlerFeature>()?.Error;
if (ex == null)
{
return;
}
if(ex.Source== "Microsoft.IdentityModel.Protocols")
context.Response.Redirect("/Home/AuthError", false);
else
context.Response.Redirect("/Home/Error", false);
}
}