MVC控制器中的承载令牌,用于访问Web API

时间:2015-06-10 05:05:41

标签: asp.net-web-api oauth oauth-2.0 bearer-token

我有两个项目:MVC,Web Api

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

  1. 获取令牌
  2. 24小时后(或任何过期时间)续订令牌
  3. 调用安全行动方法
  4. 我的想法是使用WebClient,但我不确定是否有更好的方法来解决这个问题。

    我也没有开始使用承载令牌。但需要一种可靠的方法来验证服务器到服务器和客户端(angularjs)到服务器(api)。

1 个答案:

答案 0 :(得分:1)

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

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

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

  • 当用户使用您的Web应用程序并且需要访问Web API时,您的应用程序会将浏览器重定向到auth服务器,在该服务器上通知用户哪些资源(Scopes)正在尝试访问该应用程序,并询问需要批准。此重定向包含网址回调
  • 如果用户批准访问,则AS会将浏览器重定向到回调URL,其中包含查询字符串中的一些信息,其中包含一个令牌
  • 浏览器检查网址,如果用户批准了访问权限,则会使用网址中的令牌向Auth服务器询问是否有承载令牌
  • 如果是SPA,浏览器会存储持有者令牌并使用它来访问Web API。如果它不是SPA,则令牌通常存储在cookie中,以便它不会丢失

处理令牌过期:

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

配置注意事项

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

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

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

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

所有这些事情的典型实施是dotnetopenauth。它有很好的文档记录,它可以为您处理所有细节。