【问题标题】:Why doesn't ServiceStack always link UserAuth and UserAuthDetails?为什么 ServiceStack 不总是链接 UserAuth 和 UserAuthDetails?
【发布时间】:2014-03-21 03:28:03
【问题描述】:

我正在努力解决我认为 ServiceStack 会“开箱即用”的事情......

我有一个 ServiceStack API,它允许通过凭据、基本、google OpenId 和 LinkedIn OAuth2 进行身份验证。

从空的 UserAuth 和 UserAuthDetails 表开始,我发现如果我:

  1. 启动我的应用并使用凭据登录
  2. 退出
  3. 使用 Google OpenId 身份验证登录

ServiceStack 创建两个单独的 UserAuth 记录,而不是将 Google UserAuthDetail 与经过凭据身份验证的 UserAuth 链接起来。尽管这两个凭据在两条记录中显示相同的电子邮件地址。

但是... 如果我从一个空白数据库开始并使用 LinkedIn OAuth2 重复这些步骤,我会发现使用链接的 UserAuthDetails 记录创建了一条 UserAuth 记录。这就是我希望 Google Auth 执行的操作。

任何人都可以解释为什么会发生这种情况,以及如果已经有一个匹配的电子邮件地址,我必须做些什么来确保 Google Auth 不会创建新的 UserAuth?

【问题讨论】:

    标签: authentication oauth-2.0 servicestack openid


    【解决方案1】:

    ServiceStack 合并当前经过身份验证的user session 的用户身份验证详细信息。即不在 OpenId/OAuth 提供者返回的任何匹配值上。

    如果您注销,则结束当前用户会话并再次进行身份验证将如同新的浏览器会话一样。

    【讨论】:

    • 好的,谢谢。这并不能解释功能上的差异——当我使用 LinkedIn auth 重复这些步骤时,它不会以这种方式运行。它的行为方式与我期望的一样...如果我从凭据身份验证会话中注销,然后使用 LinkedIn 身份验证登录,它不会创建第二个 UserAuth 记录,并且在创建 UserAuthDetails 记录时它会重新使用 UserAuthId从以前的凭据身份验证会话。我希望 Google OpenId Auth 以同样的方式工作。
    • 对不起,不是故意的!也无法撤消?
    • 刚刚意识到我可以在答案更新时撤消投票 - @mythz - 这可能是一个错误 - 我应该做一个拉取请求吗?
    • 还有什么地方我应该问这些问题吗?我是付费的 ServiceStack 被许可人并且喜欢该软件 - 我可以在这个问题上获得一些指导。
    • @Drammy 客户支持选项列在 servicestack.net/account/support 上 - 如果这是一个可重现的问题,您可以在 github.com/ServiceStack/Issues 上创建一个问题并列出重现它的步骤,以便我们可以跟踪它。您是否还可以确保在比较每个浏览器的行为之前清除浏览器 cookie,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多