我有一个使用JWT的无状态身份验证模型的新SPA。我经常被要求引用OAuth进行身份验证流程,比如要求我为每个请求发送“承载令牌”,而不是简单的令牌头,但我确实认为OAuth比简单的基于JWT的身份验证要复杂得多。主要的区别是什么,我应该让JWT身份验证像OAuth一样吗?

我还使用JWT作为我的XSRF- token来防止XSRF,但我被要求将它们分开?我应该把它们分开吗?这里的任何帮助都将受到感谢,并可能为社区提供一套指导方针。


当前回答

看起来每个回答这里的人都错过了OAUTH的关键

从维基百科

OAuth是一种访问授权的开放标准,通常用于互联网用户授权网站或应用程序访问他们在其他网站上的信息,但不提供密码谷歌、Facebook、微软和Twitter等公司都使用这种机制,允许用户与第三方应用程序或网站分享有关其账户的信息。

这里的关键点是访问委托。当存在基于id/pwd的身份验证时,为什么还要创建OAUTH呢?它由多因素身份验证(如otp)支持,并且可以通过用于保护路径访问(如OAUTH中的作用域)并设置访问过期的jwt进行保护

如果消费者只能通过他们信任的网站(或应用程序)访问他们的资源(您的端点),那么使用OAUTH就没有意义了,而这些网站又托管在您的端点上

只有当资源所有者(用户)希望通过第三方客户端(外部应用程序)访问他们(你的)资源(端点)时,你是OAUTH提供者,你才能进行OAUTH身份验证。它完全是为了同样的目的而创建的,尽管你可以滥用它

另一个重要提示: 对于JWT和OAUTH,您可以随意使用身份验证这个词,但它们都不提供身份验证机制。是的,一个是令牌机制,另一个是协议,但一旦经过身份验证,它们只用于授权(访问管理)。您必须使用OPENID类型身份验证或您自己的客户端凭据来支持OAUTH

其他回答

Jwt是一组用于发布和验证已签名访问令牌的严格指令。令牌包含应用程序用来限制用户访问的声明

OAuth2 on the other hand is not a protocol, its a delegated authorization framework. think very detailed guideline, for letting users and applications authorize specific permissions to other applications in both private and public settings. OpenID Connect which sits on top of OAUTH2 gives you Authentication and Authorization.it details how multiple different roles, users in your system, server side apps like an API, and clients such as websites or native mobile apps, can authenticate with each othe

注意oauth2可以与jwt一起工作,实现灵活,可扩展到不同的应用程序

看起来每个回答这里的人都错过了OAUTH的关键

从维基百科

OAuth是一种访问授权的开放标准,通常用于互联网用户授权网站或应用程序访问他们在其他网站上的信息,但不提供密码谷歌、Facebook、微软和Twitter等公司都使用这种机制,允许用户与第三方应用程序或网站分享有关其账户的信息。

这里的关键点是访问委托。当存在基于id/pwd的身份验证时,为什么还要创建OAUTH呢?它由多因素身份验证(如otp)支持,并且可以通过用于保护路径访问(如OAUTH中的作用域)并设置访问过期的jwt进行保护

如果消费者只能通过他们信任的网站(或应用程序)访问他们的资源(您的端点),那么使用OAUTH就没有意义了,而这些网站又托管在您的端点上

只有当资源所有者(用户)希望通过第三方客户端(外部应用程序)访问他们(你的)资源(端点)时,你是OAUTH提供者,你才能进行OAUTH身份验证。它完全是为了同样的目的而创建的,尽管你可以滥用它

另一个重要提示: 对于JWT和OAUTH,您可以随意使用身份验证这个词,但它们都不提供身份验证机制。是的,一个是令牌机制,另一个是协议,但一旦经过身份验证,它们只用于授权(访问管理)。您必须使用OPENID类型身份验证或您自己的客户端凭据来支持OAUTH

找出JWT和OAuth之间的主要区别

OAuth 2.0定义了一个协议,JWT定义了一个令牌格式。 OAuth既可以使用JWT作为令牌格式,也可以使用访问令牌作为承载令牌。 OpenID连接大多使用JWT作为令牌格式。

OAuth 2.0定义了一个协议,即指定了令牌如何传输,JWT定义了令牌格式。

OAuth 2.0和“JWT身份验证”在客户端向资源服务器提供令牌的(第二)阶段具有类似的外观:令牌在头文件中传递。

但是“JWT身份验证”不是一个标准,并且没有指定客户端首先如何获得令牌(第一阶段)。这就是OAuth复杂性的来源:它还定义了客户端从所谓的授权服务器获取访问令牌的各种方式。

因此,真正的区别在于JWT只是一种令牌格式,OAuth 2.0是一种协议(可以使用JWT作为令牌格式)。

JWT tokens require, at most, a one-time communication between the resource server and the authorization server at runtime. The resource server needs to request the authorization server for the public key to decrypt the JWT tokens. This can be done at resource server startup. This can even be stored in the resource server in a properties file avoiding the query at all. OAuth2 solve a problem that user wants to access the data using client software like browser-based web apps, native mobile apps, or desktop apps. OAuth2 is just for authorization, client software can be authorized to access the resources on behalf of end-user using an access token. OAuth2 can be used with JWT tokens or access token which is a bearer token.