使用OAuth(2)时,我的应用程序中需要一个重定向端点,一旦我通过身份验证,OAuth提供服务便可以重定向到该端点。

如何在单页应用程序中处理此问题?当然,这里重定向到OAuth提供服务不是很好,甚至可能无法重定向回去。

我知道OAuth还支持基于用户名/密码的 token 生成。这非常适合AJAX调用,但是需要我的单页应用程序要求输入用户名和密码。

您通常如何处理?

最佳答案

在大多数情况下,即使对于SPA来说,重定向也是可以的,因为用户不希望将其X服务凭据放置在X以外的任何其他网站上。另一种方法是使用一个小的弹出窗口,您可以检查Discourse的作用。恕我直言,重定向比弹出窗口更好。

Google某些提供程序支持resource owner flow,即您所说的发送用户名和密码,但这并不好。这些是我看到的问题:

  • 向您网站中的用户询问google凭据对于某些用户是不行的。
  • 资源所有者流也需要client_secret,这是一定不能放入客户端javascript中的东西。如果您从服务器端应用程序实例化资源所有者流,并且您的应用程序与用户所在的地理位置不同,则该用户将收到警告“嘿,有人试图从印度使用您的凭据进行访问”。

  • OAuth描述了一个称为implicit flow的客户端流。使用此流,您不需要在服务器端进行任何交互,也不需要client_secret。 OAuth提供程序使用“#access_token = xx”重定向到您的应用程序。之所以称为隐式,是因为您不需要为每个访问 token 交换授权代码,而直接获得一个access_token。

    Google实现隐式流程,检查:Using OAuth2 for Client-Side apps

    如果您想将隐式流用于不支持它的某个提供程序(例如Github),则可以使用身份验证代理(例如Auth0)。

    免责声明:我为Auth0工作。

    09-05 21:05
    查看更多