取消外部登录的例外

时间:2018-07-21 11:04:21

标签: oauth asp.net-core-2.1

(不要害怕这么大的描述,我只是想具体说明一下,以便回答者更容易)

我正在使用具有外部登录名的ASP.Net Core 2.1构建Web应用程序。但是,当外部(facebook)登录被取消并且facebook重定向到源应用程序时,发生内部服务器错误。 这意味着,您单击了Facebook外部登录按钮,然后通过单击“不立即”按钮将其取消。 Facebook重定向回您的应用程序(https://localhost:port/signin-facebook?...);然后瞧瞧-例外。

  

处理请求时发生未处理的异常。   异常:access_denied; Description =权限错误   未知位置

     

异常:处理远程登录时遇到错误。   Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync()

enter image description here

当Asp.net Core系统从Startup.cs类准备好Facebook身份验证时,Facebook身份验证提供程序将自动生成“ https://.../signin-facebook”路由,如Microsoft文档和Github / aspnet中所述:

如果我在没有任何查询字符串的情况下直接点击“ https://localhost:port/signin-facebook”,则显示此异常:OAuth状态丢失或无效。 enter image description here

但是预期的行为是-它将被重定向到默认登录页面。

这是startup.cs代码段:

services.ConfigureApplicationCookie(options => options.LoginPath = "/Account/LogIn");
services
    .AddAuthentication(o => o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Account/Login";
        options.LogoutPath = "/Account/Logout";
    });

services.AddAuthentication()
    .AddFacebook(o =>
    {   
        o.AppId = Configuration.GetValue<string>("Facebook:AppId");
        o.AppSecret = Configuration.GetValue<string>("Facebook:AppSecret");
    });

我配置了一个自定义的回调路径(如microsoft doc中所述),但有相同的例外。

所以...,这是怎么回事?怎么了那有什么解决方案?

仅供参考,我不会从应用程序访问数据库,而是使用默认的IdentityDbContext.UseModel()并使用HttpContext.SigninAsync进行cookie身份验证。完成外部登录而不是取消后,一切都很好。

1 个答案:

答案 0 :(得分:1)

根据Asp.Net Core Github存储库,Asp.net Core团队为working on it now。当前,开发人员正在使用var elem = document.createElement('div'); elem.className = 'adclass'; document.body.appendChild(elem); window.setTimeout(function () { var isAdblockEnabled = !(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length); if (isAdblockEnabled) { // Adblock is enabled } }, 0); 事件来优雅地handle the exception并执行所需的操作。

Startup.cs:

OnRemoteFailure