用于RESTWeb服务的OAuth 2.0

用于RESTWeb服务的OAuth 2.0,oauth,oauth-2.0,jax-rs,jwt,rest-security,Oauth,Oauth 2.0,Jax Rs,Jwt,Rest Security,我正在为现有应用程序实现REST层。我的用户名和密码存储在数据库中,我想在调用REST服务时验证这些凭据。请注意,这是一个独立的应用程序 经过调查,我想出了两种方法 HTTPS的基本实现——这种方法确保 传递的用户ID和密码不会被中间人攻击篡改 使用身份验证令牌(JWT)-用户最初传递其用户ID 密码和服务器返回一个身份验证令牌 具有可用于后续操作的身份验证令牌 请求 使用OAuth2.0——我对这种方法感到非常困惑。在阅读了文档和说明书之后,我发现自从我的申请 是独立的,我需要实现授权服务器

我正在为现有应用程序实现REST层。我的用户名和密码存储在数据库中,我想在调用REST服务时验证这些凭据。请注意,这是一个独立的应用程序

经过调查,我想出了两种方法

  • HTTPS的基本实现——这种方法确保 传递的用户ID和密码不会被中间人攻击篡改
  • 使用身份验证令牌(JWT)-用户最初传递其用户ID 密码和服务器返回一个身份验证令牌 具有可用于后续操作的身份验证令牌 请求
  • 使用OAuth2.0——我对这种方法感到非常困惑。在阅读了文档和说明书之后,我发现自从我的申请 是独立的,我需要实现授权服务器,资源 服务器等
我被要求在这里实现OAuth,但我不相信在这个场景中需要OAuth。我更倾向于只实现JWT(令牌)

在这个场景中,OAuth真的是强制的吗。我对OAuth的理解是,当你已经有了Facebook/Google这样的服务时,它就会被使用


有人能确认我的思路是否正确,以及在这种情况下是否需要OAuth 2.0吗?

OAuth 2.0的主要目标是允许用户通过第三方身份验证提供商(如谷歌、Facebook等)验证使用客户端应用程序,而不公开其凭据(通常是用户名/密码)给客户

在您的情况下,如果用户只打算使用数据库中的凭据对您的系统进行身份验证,那么实现OAuth 2.0不会给您带来任何实质性的价值


OAuth2.0规范确实定义了一个适用于您的情况的遗留用例:用户发送凭据,您返回一个访问令牌(如果愿意,可以是JWT)。如果从管理或营销的角度考虑,您可以实现资源所有者密码凭据授予,并合法地声明您的应用程序“符合RFC6749定义的OAuth2的子集”.

OAuth 2.0的主要目标是允许用户通过第三方身份验证提供商(如Google、Facebook等)对使用客户端应用程序进行身份验证,而无需向客户端公开其凭据(通常是用户名/密码)

在您的情况下,如果用户只打算使用数据库中的凭据对您的系统进行身份验证,那么实现OAuth 2.0不会给您带来任何实质性的价值


OAuth2.0规范确实定义了一个适用于您的情况的遗留用例:用户发送凭据,您返回一个访问令牌(如果愿意,可以是JWT)。如果从管理或营销的角度来看是可取的,您可以实现资源所有者密码凭据授予,并合法地声明您的应用程序“符合RFC6749定义的OAuth2的子集”。

OAuth2.0和JWTs可以一起使用(访问令牌可以是JWT)。不确定这是否是混淆的地方,但如果您只需要担心一个资源,那么JWTs听起来似乎可以工作?或者,如果您被要求实现类似“使用Google登录”的功能,那么@neverendingqs产品是独立的企业产品,正在执行某些“xyz”任务,我将为这些任务公开REST api。我不可能有“使用facebook或谷歌登录”这样的东西。我知道Oauth2和JWT可以一起使用,但我的主要困惑是Oauth2.0是否适合这个场景?我可以使用Oauth2验证存储在数据库中的用户ID和密码吗。我将如何实现资源服务器、授权服务器?您是否考虑过资源所有者密码凭据授予()?这是另一个选项。可能“资源所有者密码凭据授予”与我的规范很接近。您知道实现此功能的java OAuth库吗?在我的情况下,我需要实现我的授权服务器?OAuth 2.0和JWTs可以一起使用(访问令牌可以是JWT)。不确定这是否是混淆的地方,但如果您只需要担心一个资源,那么JWTs听起来似乎可以工作?或者,如果您被要求实现类似“使用Google登录”的功能,那么@neverendingqs产品是独立的企业产品,正在执行某些“xyz”任务,我将为这些任务公开REST api。我不可能有“使用facebook或谷歌登录”这样的东西。我知道Oauth2和JWT可以一起使用,但我的主要困惑是Oauth2.0是否适合这个场景?我可以使用Oauth2验证存储在数据库中的用户ID和密码吗。我将如何实现资源服务器、授权服务器?您是否考虑过资源所有者密码凭据授予()?这是另一个选项。可能“资源所有者密码凭据授予”与我的规范很接近。您知道实现此功能的java OAuth库吗?在我的情况下,我需要实现我的授权服务器?