使用OAuth时(2)我的应用程序中需要一个重定向端点,一旦我通过身份验证,OAuth提供服务就可以重定向到该端点。
如何在单页应用程序中处理此问题?当然,重定向到提供OAuth的服务并不好,甚至可能无法重定向。
我知道OAuth还支持基于用户名/密码的令牌生成。这与AJAX调用完美配合,但要求我的单页应用程序要求输入用户名和密码。
你通常如何处理这个问题?
答案 0 :(得分:46)
大多数情况下,即使对于SPA,重定向也是可以的,因为用户不喜欢将他们的X服务凭证放在除X之外的任何其他网站上。另一种方法是使用一个小弹出窗口,你可以查看{ {3}}。恕我直言,重定向比弹出窗口好。
Google 某些提供商支持Discourse,这就是您所说的发送用户名和密码,但这并不好。这些是我看到的问题:
OAuth描述了一个名为resource owner flow的客户端流程。使用此流程,您不需要在服务器端进行任何交互,也不需要client_secret。 OAuth提供程序使用“#access_token = xx”重定向到您的应用程序。它被称为隐式,因为您不需要按访问令牌交换授权码,直接获得access_token。
Google实施隐式流程,请检查:implicit flow。
如果您想使用隐式流与某些不支持它的提供程序(如Github),您可以使用Using OAuth2 for Client-Side apps之类的身份验证代理。
免责声明:我为Auth0工作。
答案 1 :(得分:20)
答案 2 :(得分:1)
OAuth2有4个流,也称为授权类型,每个流都有特定的用途:
简单的答案是:使用隐式流。
为什么?选择流或授予类型取决于代码的任何部分是否可以保持私有,从而能够存储秘密密钥。如果是这样,您可以选择最安全的OAuth2流-Authorization Code
,否则,您将不得不选择安全性较低的OAuth2流。例如,对于Implicit
流的单页应用程序(SPA)。
Client Credential
流仅在Web服务和用户是同一实体的情况下才有效,即,Web服务仅服务于该特定用户,而Resource Owner Password Credential
流是最不安全的,因为用户需要向服务提供其社交登录凭据。
要完全了解建议的Implicit
流和Authorization Code
流(您提到的流并需要重定向)之间的区别,请并排看一下流:
此图摘自:https://blog.oauth.io/introduction-oauth2-flow-diagrams/