如果我有服务器端代理,可以将Oauth2授权代码流用于SPA(React应用)吗?

nik*_*ovn 4 single-sign-on oauth-2.0 openid-connect microservices identityserver4

看完有关OAuth2的大量教程之后,有一种最佳实践,每个人都反复声明-如果您有React应用(或Angular或Ember),则必须对其使用隐式流

我了解将客户端凭据存储在公开可见的javascript中不起作用。但是,我的情况有些不同:

  1. 我仅将Oauth2用于微服务的单点登录和令牌生成。我选择它而不是简单地生成令牌,因为受支持的第三方库是围绕Oauth2想法构建的。
  2. 我的想法是拥有一个React应用程序和一个ASP.NET MVC应用程序,该应用程序可以处理JavaScript并充当API请求的代理。用户通过使用Oauth2授权代码流对服务器端应用程序进行身份验证。
  3. 然后,如果需要从API检索数据,可以从React调用我的ASP.NET MVC应用程序(通过发送一个简单的cookie)。MVC应用程序保留令牌,而不会将其暴露给用户的浏览器。
  4. 显然,当被调用时,我的MVC应用程序会将请求重定向到必要的API,并提供承载令牌。

为了更好地理解为什么这是我想出的原因,以下是我收到的一些可能不常见的要求:

  1. 我真的不希望共享访问令牌-即使访问令牌的寿命相对较短。
  2. 我还希望能够将每个用户帐户限制为3个并发用户会话。使用cookie和服务器端会话很容易做到。

我无法确定为什么这个想法会那么糟糕。是否有任何技术问题可能会阻止此工作?还是存在安全风险?

Set*_*Set 5

授权码流返回一个授权码(就像在罐子上说的那样),然后可以将其交换为ID令牌和访问令牌。这需要使用客户端ID和密码进行客户端身份验证以从后端检索令牌,并且具有不将令牌暴露给用户代理的好处。

此流程允许长期访问(通过使用刷新令牌)。 使用此流程的客户必须能够维护秘密

根据您的描述,您具有服务到服务的授权流程,并且由于您的服务未公开客户端密钥,因此完全可以使用Code流程。此外,您应该使用它来允许长期存在的令牌。