1

我有两个项目:MVC、Web Api

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

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

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

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

4

1 回答 1

1

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

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

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

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

处理令牌过期:

令牌有关于过期时间的信息,通常包括一个刷新令牌。您可以使用刷新令牌在过期之前将其呈现给AS,这样您就不需要请求新令牌

配置注意事项

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

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

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

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

所有这些东西的典型实现是dotnetopenauth。它有很好的文档记录,它为您处理所有细节。

于 2015-06-10T09:16:57.473 回答