【发布时间】: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 的用户,身份验证工作正常
我做错了什么? 提前致谢!
更新:
复制场景:
- 确保您没有在浏览器中登录 facebook(打开 facebook.com 并在需要时退出)
- 运行网络应用(使用模板mvcauth创建的项目)
- 尝试通过 facebook 登录 3.1。对于第一次尝试,您将被重定向到https://www.facebook.com/login.php?用于指定您的 Facebook 帐户凭据的页面
- 第一次尝试后,您将返回到 Web 应用页面 /Account/Login#s=1,但 AccountController.Login 中的 User.Identity.IsAuthenticated = false 并且您仍然未经授权。
- 第二次尝试后,您终于可以成功登录了
同时在第一次尝试后,将创建带有用户数据的会话并将其保存在缓存中,看起来从页面“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