如何验证通过 URL 发送的 Web Api 2 Owin 令牌?

How can I validate Web Api 2 Owin Token send via URL?

TL;DR 版本
我的 Cordova AngularJS 应用程序出现问题,我需要打开浏览器并发出请求。但我发现我无法根据此申请发送 headers,仅仅是因为 $window 不接受它们。但我可以在 URL.
中发送 如何验证通过 Web API 上的 URL 收到的令牌?

详细版本

我正在构建一个 Cordova 应用程序,使用 AngularJs 和 ngCordova。最近几天,我尝试下载一个 PDF 文件并将其留给用户使用,以便他可以随时阅读。但我所能做到的就是在后台使用 CordovaFileTransfer 下载它(没有 Android 下载管理器)并通过文件资源管理器应用程序访问它(因为该文件没有出现在常规下载 Folder/App 中),这不是对我有好处(我很乐意收到关于这方面的任何想法)。

所以我决定尝试另一种方法。使用 CordovaInAppBrowser 我设法成功下载了我的文件,但只是没有任何授权令牌,因为该插件不支持任何 headers.

如果我可以在 URL 上发送有效令牌,CordovaInAppBrowser 就可以正常工作。但是我不知道如何在 Web Api 上手动验证它。我找到了那两个包含相关信息的页面,但我无法理解如何在我的应用程序中使用它。

Retrieving bearer tokens from alternative locations in Katana/OWIN
Passing the access token on the URL

有人能指出我正确的方向吗?

无论是从header中还是从URL查询字符串中提取token,原理都是一样的;您需要从请求中提取数据以验证令牌。

我使用了两种方法,具体取决于您要在何处执行此操作。

第一种方法是通过覆盖 AuthorizeAttribute 甚至普通 ActionFilterAttribute 创建一个 自定义属性 。有大量关于此主题的资源,但您可以找到一些信息 here and here。如果您不想在所有 API 方法和 API 控制器上执行此操作,则此方法非常有效。您只需将自定义属性放在您想要的位置即可。

第二种方法是创建一个自定义 OWIN 中间件Here and here 您可以找到有关如何执行此操作的大量资源。这种方法更加集中,因为您的所有 API 调用都会通过它。