【问题标题】:ServiceStack Authentication IsAuthenticated always false for users authenticated via facebook对于通过 facebook 进行身份验证的用户,ServiceStack Authentication IsAuthenticated 始终为 false
【发布时间】:2019-09-17 14:27:21
【问题描述】:

您好,我正在尝试使用 servicestack 提供的 OAuth 身份验证 FacebookAuthProvider

 var AppSettings = appHost.AppSettings;
            appHost.Plugins.Add(new AuthFeature(() => new CustomUserSession(),
                new IAuthProvider[] {
                    new CredentialsAuthProvider(AppSettings),
                    new FacebookAuthProvider(AppSettings),
                    new GoogleAuthProvider(AppSettings)
                }));

我已经实现了自定义 AuthEvents 并且我可以访问授权的用户数据

但在端点会话中发生 RedirectUrl 后为空且 IsAuthenticated 属性为 false

同时从控制器我可以看到创建的会话成功保存在缓存中

这种情况仅在用户尚未在浏览器中登录 facebook 时发生,但对于已登录 facebook 的用户,身份验证工作正常

我做错了什么? 提前致谢!

更新:

复制场景:

  1. 确保您没有在浏览器中登录 facebook(打开 facebook.com 并在需要时退出)
  2. 运行网络应用(使用模板mvcauth创建的项目)
  3. 尝试通过 facebook 登录 3.1。对于第一次尝试,您将被重定向到https://www.facebook.com/login.php?用于指定您的 Facebook 帐户凭据的页面
  4. 第一次尝试后,您将返回到 Web 应用页面 /Account/Login#s=1,但 AccountController.Login 中的 User.Identity.IsAuthenticated = false 并且您仍然未经授权。
  5. 第二次尝试后,您终于可以成功登录了

同时在第一次尝试后,将创建带有用户数据的会话并将其保存在缓存中,看起来从页面“https://www.facebook.com/login.php”重定向后,创建了一个没有身份验证数据的新会话,但第二次尝试我们成功登录,也许问题的核心是来自'https://www.facebook.com/login.php'的重定向

【问题讨论】:

  • 这听起来好像 Auth 不成功,重定向 url 是带#f 还是 #s 后缀的?
  • 重定向网址看起来像Account/Login#s=1
  • 您当前的Startup.cs 是什么?你有没有把app.UseAuthentication();放在app.UseMvc前面
  • 是的,在 Startup.cs 我有 app.UseAuthentication();在 app.UseMvc 之前使用用户名/密码登录按预期工作如果我在浏览器的另一个选项卡上登录 facebook,然后再次尝试通过 facebook 从我的网络应用程序进行身份验证,我将成功登录。同样在第一次身份验证尝试之后(完成,如我描述了,IsAuthenticated = false)当我再次在我的网络应用程序中按下通过 facebook 按钮登录时,我成功登录(无需再次输入我的 facebook 凭据)。
  • 你是从什么项目模板开始的?

标签: asp.net-core oauth servicestack


【解决方案1】:

为了能够在 MVC 中使用 ServiceStack.Auth,反之亦然,您需要注册 NetCoreIdentityAuthProvider,它提供了 ServiceStack Authenticated Sessions 和 ASP.NET Core 的 Claims Principal 之间的集成,例如:

public void Configure(IAppHost appHost)
{
    var AppSettings = appHost.AppSettings;
    appHost.Plugins.Add(new AuthFeature(() => new CustomUserSession(),
        new IAuthProvider[] {
            new NetCoreIdentityAuthProvider(AppSettings), /* Use ServiceStack Auth in MVC */
            new CredentialsAuthProvider(AppSettings),     /* Sign In with Username / Password  */
            new FacebookAuthProvider(AppSettings),        
            new GoogleAuthProvider(AppSettings),          
            new MicrosoftGraphAuthProvider(AppSettings),  
        }));

    appHost.Plugins.Add(new RegistrationFeature()); //Enable /register Service

    //override the default registration validation with your own custom implementation
    appHost.RegisterAs<CustomRegistrationValidator, IValidator<Register>>();
}

【讨论】:

  • 感谢您的更新,但似乎无法解决问题,请看一下我已将问题更新为重现场景
猜你喜欢
  • 2017-08-18
  • 2015-09-09
  • 1970-01-01
  • 2015-11-08
  • 2014-06-13
  • 2017-07-03
  • 1970-01-01
  • 2017-11-01
  • 2019-11-09
相关资源
最近更新 更多