MVC 控制器中用于访问 Web 的不记名令牌 API

Bearer token in MVC controller to access Web API

我有两个项目:MVC、Web Api

在 Web API 项目中,我使用不记名令牌身份验证。此令牌将在 24 小时后过期。在我的 MVC 项目中,我想通过 MVC 控制器(服务器到服务器)调用 Web api 项目。最好的方法是:

  1. 获得令牌
  2. 24 小时后(或任何到期时间)更新令牌
  3. 调用安全操作方法

我的想法是使用 WebClient,但我不确定是否有更好的方法来解决这个问题。

我也不打算使用不记名令牌。但是需要一种可靠的方法来验证服务器到服务器和客户端(angularjs)到服务器(api)。

服务器到服务器的 OAuth 流程:

  • 您的网络服务器连接到您的授权服务器(AS,在本例中包含在 Web API 主机中),共享密钥
  • AS (web API) return你的网络服务器的令牌
  • Web 服务器存储令牌以在下一个 Web API 调用中使用它

对于客户端到服务器,流程是不同的:

  • 当用户正在使用您的 Web 应用程序并且需要访问 Web API 时,您的应用程序会将浏览器重定向到 auth 服务器,并在其中通知用户哪些资源(Scopes)正在尝试访问访问应用程序,并请求批准。此重定向包含一个 url 回调
  • 如果用户批准访问,AS 将浏览器重定向到回调 url,并在查询字符串中包含一些信息,其中包括令牌
  • 浏览器检查 url,如果用户批准访问,它会使用 url 中的令牌向 Auth 服务器请求 Bearer 令牌
  • 如果是 SPA,浏览器会存储不记名令牌并使用它来访问 Web API。如果不是SPA,token一般保存在cookie中,这样就不会丢失

处理令牌过期:

token有过期时间信息,通常包含刷新token。可以使用refresh token在过期前呈现给AS,这样就不需要再申请新的token了

配置注意事项

不同的流必须在服务器中以不同的方式配置。

"server to server" 的第一个流程使用共享密钥将 berare 令牌直接 return 到服务器应用程序。在这种情况下不需要用户批准,因为没有用户参与这个过程

第二个流程,从(不受信任的)客户端到服务器需要用户的授权,因为您的客户端应用程序将代表他访问用户(资源所有者)的某些资源,因此需要他的批准。

还有其他流程,例如来自受信任客户端的流程,但不适用于这种情况。

所有这些事情的典型实现是 dotnetopenauth。它有很好的文档记录,并为您处理所有细节问题。