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

时间:2016-03-01 04:28:11

标签: oauth servicestack servicestack-auth

此问题与ServiceStack OAuth身份验证流程有关。展开FacebookAuthProvider,我看到如果代码参数不是null(从重定向到Facebook对话框url获得),它会使用它来获取访问令牌。 AuthProvider对OAuthAuthorizer也这样做。

如何使用Javascript SDK获取单页面应用程序的访问令牌(弹出窗口中没有重定向的模式)。是否有任何端点来验证发出访问令牌的用户?

另外,您认为这是一个安全漏洞吗?我相信,如果用户首先使用凭据提供程序签名,然后使用OAuth提供程序,则ServiceStack会创建两个独立的帐户。如果服务器使用Facebook API验证访问令牌并返回有效响应,我认为应该可以在应用程序中签署已存在的用户(我想在提供商等于 facebook 应该足以信任。)

1 个答案:

答案 0 :(得分:1)

FacebookAuthProvider遵循相同的OAuth提供程序流,每个其他OAuth提供程序遵循该流程,重定向到远程OAuth站点以捕获用户授权,然后使用AuthProvider用于检索用户的access_token的代码重定向回来。内置的AuthProviders都不依赖于任何JavaScript SDK。

ServiceStack不会创建2个单独的用户帐户,它会创建1个用户帐户,该帐户与经过身份验证时已经过身份验证的每个AuthProvider链接。然后,用户可以使用他们之前已通过身份验证的任何Auth提供商进行身份验证,以登录其帐户。

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