有很多文章,为什么OAuth不用于身份验证。我不了解身份验证发生的位置(如果使用不正确)。有人可以用错误的方式解释简单可信的Web应用程序和OAuth的SPA使用情况吗?
如果我从应用程序/ users / 1 / detail调用,并将传递正确的Bearer标头,那么OAuth如何用于验证用户的ID是否为1?是否需要使用JWT才能解码访问令牌并与其中包含的ID进行比较?
答案 0 :(得分:0)
OAuth 2.0 is NOT an Authentication protocol。 (但是您可以像OpenID Connect一样在OAuth 2.0的基础上构建一个)
OAuth是一种开放标准,可扩展的RESTful协议,用于使用HTTP对服务器资源的授权的委派。
答案 1 :(得分:0)
假设有一个类似OAuth的协议(我们称其为MyAuth),但用于通过应用后端验证应用的前端。
要了解OAuth和MyAuth为什么不同的原因,首先要知道它们都具有长寿命的刷新令牌和访问寿命短的令牌。同样,如果party1需要访问party2,则party2将必须生成这些令牌,而party1将必须以某种方式存储这两个令牌以维持访问权限。
关于OAuth:
我们有三个参与方(也有其他类型):App1的后端,App1的前端和App2的后端。
此处的目的是代表用户授予对App1的后端和前端的访问权限,对App2的后端的访问权限。
仅在此处,可以将App1的后端和App2的后端作为安全方进行信任。
关于MyAuth:
我们有两方:App1的后端,App1的前端。
这里的目的是代表用户为App1的前端提供访问App1的后端的权限(在用户登录应用后,所有应用都是这种情况)。
只有App1的后端是受信任的方。
由于刷新令牌的寿命很长,因此未经授权访问它们可能是一个严重的问题。因此,在OAuth流程中,它的设计目的是使App2后端的刷新令牌仅存储在App1的后端(这是受信任的一方)上。而且只有App2后端的访问令牌(短暂)才发送到App1的前端。在MyAuth中,我们没有可信方来存储App1后端的刷新令牌。这意味着,您将刷新令牌存储在一个相对容易被盗的地方,这是一个安全问题。因此,虽然OAuth不必这样解决问题,但MyAuth可以解决。
要了解有关会话安全性和各种类型的流的更多信息,请参阅:https://hackernoon.com/all-you-need-to-know-about-user-session-security-ee5245e6bdad