Servicestack Auth - 使用已颁发的访问令牌进行身份验证

Servicestack Auth - authenticate with an already issued Access Token

此问题与 ServiceStack OAuth 身份验证流程有关。调试 FacebookAuthProvider 我看到如果 code 参数不为空(从重定向到 Facebook 对话框 url 获得),它会使用它来获取访问令牌。 AuthProvider 对 OAuthAuthorizer 做同样的事情。

如何使用 Javascript SDK 为单页应用程序获取访问令牌(在弹出窗口中使用模式,没有重定向)。是否有任何端点可以使用颁发的访问令牌对用户进行身份验证?

另外,您认为这是一个安全漏洞吗?我相信,如果用户首先使用 Credentials Provider 签名,然后使用 OAuth Provider,ServiceStack 会创建两个单独的帐户。如果服务器使用 Facebook API 和 returns 验证访问令牌是一个有效的响应,我认为应该可以在应用程序中签署一个已经存在的用户(我想寻找任何 AuthUserDetails 与 provider 等于 facebook 应该足够信任了)。

FacebookAuthProvider 遵循与所有其他 OAuth 提供者相同的 OAuth 提供者流程,重定向到远程 OAuth 站点以捕获用户授权,然后使用 AuthProvider 用于检索 access_token 给用户。 None 的内置 AuthProvider 对任何 JavaScript SDK 有任何依赖性。

ServiceStack 不会创建 2 个单独的用户帐户,它会创建 1 个用户帐户,该帐户与他们在通过身份验证时与之进行身份验证的每个 AuthProvider 相关联。然后,用户可以使用他们之前验证过的任何 Auth Provider 进行身份验证,以登录他们的帐户。

仅当用户在使用 Facebook 进行身份验证时尚未通过身份验证时,才会创建单独的用户帐户。但它只会在没有使用同一电子邮件注册的现有 UserAccount 的情况下创建新帐户,否则它将失败并显示 EmailAlreadyExists 错误。如果创建了单独的用户帐户,这些将被视为 2 个未链接的单独帐户(即具有不同的 UserAuthId),在这种情况下,使用任一 Auth Provider 进行身份验证将登录到 2 个不同的用户帐户。