OAuth2 for REST API,紧耦合SPA作为唯一客户端

OAuth2 for REST API,紧耦合SPA作为唯一客户端,rest,security,spring-security,oauth,oauth-2.0,Rest,Security,Spring Security,Oauth,Oauth 2.0,我正在开发一个RESTAPI,其中一个紧密耦合的SPA是上述RESTAPI的唯一客户端 假设SPA在myservice.com上可用,api在myservice.com/api下。它们基本上是一个服务,只是在代码级别拆分,并部署在不同的根路径上 我现在使用的是OAuth2,带有ROPC用户名/密码授权类型 问题来了。我到处都在读,ROPC不安全,不应该使用。那我应该用什么 我的RESTAPI充当授权服务器,但它本身没有任何web界面。因此,任何涉及重定向的流都没有意义。SPA和API紧密耦合,对

我正在开发一个RESTAPI,其中一个紧密耦合的SPA是上述RESTAPI的唯一客户端

假设SPA在myservice.com上可用,api在myservice.com/api下。它们基本上是一个服务,只是在代码级别拆分,并部署在不同的根路径上

我现在使用的是OAuth2,带有ROPC用户名/密码授权类型

问题来了。我到处都在读,ROPC不安全,不应该使用。那我应该用什么

我的RESTAPI充当授权服务器,但它本身没有任何web界面。因此,任何涉及重定向的流都没有意义。SPA和API紧密耦合,对于最终用户来说,它们基本上是一个应用程序。没有第三方

我可以在API中添加简单的登录表单,比如myservice.com/login。但我努力想看到这会有什么不同

此应用程序中的安全性非常重要

以下是我的问题:

在这种情况下使用ROPC真的很危险吗

认证和授权的最佳方式是什么

或者OAuth2在没有第三方的情况下是完全冗余的

使用的技术:

服务器:Spring引导

在这种情况下使用ROPC真的很危险吗

不,不是真的提供:

a您不存储用户的密码-可能只用于获取初始访问和刷新令牌-尽管使用SPA可能会很棘手

b您的SPA客户端和资源API归您所有,因此您不需要用户同意SPA的特定范围访问

认证和授权的最佳方式是什么

这取决于很多事情。没有足够的信息来回答这个问题。OAuth2.0和可能实现的授权服务器对于这里的示例来说是一种非常好的方式

或者OAuth2在没有第三方的情况下是完全冗余的

如果其他应用程序将及时使用您的API,那么OAuth2.0可能是一个不错的调用。否则,您可能会使用一个更简单的解决方案,例如会话cookie,因为它们都位于同一个域中

在这种情况下使用ROPC真的很危险吗

不,不是真的提供:

a您不存储用户的密码-可能只用于获取初始访问和刷新令牌-尽管使用SPA可能会很棘手

b您的SPA客户端和资源API归您所有,因此您不需要用户同意SPA的特定范围访问

认证和授权的最佳方式是什么

这取决于很多事情。没有足够的信息来回答这个问题。OAuth2.0和可能实现的授权服务器对于这里的示例来说是一种非常好的方式

或者OAuth2在没有第三方的情况下是完全冗余的


如果其他应用程序将及时使用您的API,那么OAuth2.0可能是一个不错的调用。否则,您可能会使用一个更简单的解决方案,例如会话cookie,因为它们都位于同一个域中。

对此的答案可以从自身中取出。它定义了ROPC拨款何时适用于:

资源所有者密码凭据授予类型适用于 资源所有者与 客户端,如设备操作系统或高度特权 应用授权服务器在运行时应特别小心 启用此授予类型并仅在其他流不可用时才允许它 维亚布尔

根据您的解释,您与SPA和后端紧密耦合。此外,您还将授权服务器和资源服务器构建为一个整体。这完全是错误的

授权服务器 可以是与资源服务器相同的服务器,也可以是单独的实体

所以现在重要的是弄清楚为什么在场景中使用OAuth 2.0

如果您使用OAuth2.0来获取令牌,请按照OAuth2.0规范中的定义维护它们,那么这完全是oaky。但如果你这样做是为了顺应潮流,那就三思而后行

OAuth2.0实现有其自身的复杂性。您必须维护用户身份、维护令牌并续订它们。您正在自己构建一个完整的授权服务器。但这也有一些好处

例如,同一授权服务器可用于为将来的集成/辅助应用程序颁发令牌。依我看,OAuth2.0的使用使集成变得容易,因为它定义了一个用于颁发令牌、更新和撤销令牌的协议。!但在这种整合场景中,您可能需要使用不同的补助金。尽管如此,您的API在令牌上获得授权,您只需要担心新的集成/应用程序如何获得令牌。这比使用经过身份验证的会话要好

回到你的问题上来

问:是否正在使用ROPC reall 在这种情况下你有危险吗

如前所述,如果客户机和授权服务器之间存在正确的信任关系,那么就可以了。但要注意,拥有授权服务器会带来复杂性

问:认证和授权的最佳方式是什么

OAuth2.0用于授权。您获得访问令牌并使用它们对受保护的API进行授权。通过API,您可以进行令牌验证,以检测正确的访问级别/权限

如果你想要认证,那么你必须使用。它是从OAuth 2.0扩展而来的协议。并允许应用程序基于ID令牌对最终用户进行身份验证。您可以使用ROPC授权来获取ID令牌

问:或者OAuth2在没有第三方的情况下是完全冗余的

不一定。它允许您以现代、标准的方式设计API。谁知道集成场景的未来会怎样。遵循一个协议就可以很容易做到这一点


仅提供建议,严格遵守规范。不要发明自己的协议/改编。它使事情更难维护。

这个问题的答案可以从它自己身上取出来。它定义了ROPC拨款何时适用于:

资源所有者密码凭据授予类型适用于 资源所有者与 客户端,如设备操作系统或高度特权 应用授权服务器在运行时应特别小心 启用此授予类型并仅在其他流不可用时才允许它 维亚布尔

根据您的解释,您与SPA和后端紧密耦合。此外,您还将授权服务器和资源服务器构建为一个整体。这完全是错误的

授权服务器 可以是与资源服务器相同的服务器,也可以是单独的实体

所以现在重要的是弄清楚为什么在场景中使用OAuth 2.0

如果您使用OAuth2.0来获取令牌,请按照OAuth2.0规范中的定义维护它们,那么这完全是oaky。但如果你这样做是为了顺应潮流,那就三思而后行

OAuth2.0实现有其自身的复杂性。您必须维护用户身份、维护令牌并续订它们。您正在自己构建一个完整的授权服务器。但这也有一些好处

例如,同一授权服务器可用于为将来的集成/辅助应用程序颁发令牌。依我看,OAuth2.0的使用使集成变得容易,因为它定义了一个用于颁发令牌、更新和撤销令牌的协议。!但在这种整合场景中,您可能需要使用不同的补助金。尽管如此,您的API在令牌上获得授权,您只需要担心新的集成/应用程序如何获得令牌。这比使用经过身份验证的会话要好

回到你的问题上来

问:在这种情况下使用ROPC真的很危险吗

如前所述,如果客户机和授权服务器之间存在正确的信任关系,那么就可以了。但要注意,拥有授权服务器会带来复杂性

问:认证和授权的最佳方式是什么

OAuth2.0用于授权。您获得访问令牌并使用它们对受保护的API进行授权。通过API,您可以进行令牌验证,以检测正确的访问级别/权限

如果你想要认证,那么你必须使用。它是从OAuth 2.0扩展而来的协议。并允许应用程序基于ID令牌对最终用户进行身份验证。您可以使用ROPC授权来获取ID令牌

问:或者OAuth2在没有第三方的情况下是完全冗余的

不一定。它允许您以现代、标准的方式设计API。谁知道集成场景的未来会怎样。遵循一个协议就可以很容易做到这一点


仅提供建议,严格遵守规范。不要发明自己的协议/改编。这使得维护变得更加困难。

@dur IMO规范中强调的要点是资源所有者与客户机之间存在信任关系的那一行。设备操作系统或特权应用程序就是一些例子。在OP的场景中,SPA由同一组织的后端API拥有。这都是关于信任关系的,正如我强调的第二点,使用OAuth令牌与API通信比使用基本身份验证要好。当然,可以使用会话,它在登录后得到身份验证。但正如我所强调的,它可能会使未来的集成变得困难。所以,如果OP想要灵活性,而OP并不是仅仅因为一个流行语就试图跟随趋势去适应OAuth,那么ROPC对于这个特定场景来说是可以的。谢谢。我有一个后续问题。如果我想为令牌获取添加其他安全措施,例如recaptcha。这是否符合协议?或者在这种情况下,我应该放弃OAuth并创建自己的令牌获取解决方案吗?似乎不可能
哦,找到答案。@TuanPham嗯,这是您从OAuth获得的另一个好处。由于您在授权服务器上对最终用户进行身份验证,所以您的双因素身份验证将在授权服务器上实现。您的应用程序不必担心这种实现。这与协议无关,但与您选择最终用户身份验证的方式有关是的,但正如我在问题中所说的,在授权服务器上,我使用OAuth协议获取令牌。请记住,我的应用程序和我的应用程序服务器基本上是一体的。OAuth在这里仅仅是一个令牌获取协议。我是否可以在令牌获取过程中添加一些额外的安全层,如captcha?@dur IMO规范中突出显示的要点是资源所有者与客户端之间存在信任关系的那一行。设备操作系统或特权应用程序就是一些例子。在OP的场景中,SPA由同一组织的后端API拥有。这都是关于信任关系的,正如我强调的第二点,使用OAuth令牌与API通信比使用基本身份验证要好。当然,可以使用会话,它在登录后得到身份验证。但正如我所强调的,它可能会使未来的集成变得困难。所以,如果OP想要灵活性,而OP并不是仅仅因为一个流行语就试图跟随趋势去适应OAuth,那么ROPC对于这个特定场景来说是可以的。谢谢。我有一个后续问题。如果我想为令牌获取添加其他安全措施,例如recaptcha。这是否符合协议?或者在这种情况下,我应该放弃OAuth并创建自己的令牌获取解决方案吗?似乎找不到答案。@TuanPham嗯,这是您从OAuth获得的另一个好处。由于您在授权服务器上对最终用户进行身份验证,所以您的双因素身份验证将在授权服务器上实现。您的应用程序不必担心这种实现。这与协议无关,但与您选择最终用户身份验证的方式有关是的,但正如我在问题中所说的,在授权服务器上,我使用OAuth协议获取令牌。请记住,我的应用程序和我的应用程序服务器基本上是一体的。OAuth在这里仅仅是一个令牌获取协议。我是否可以在令牌获取过程中添加一些额外的安全层,如captcha?