IdentityServer3 访问令牌验证和 pre-signed url

IdentityServer3 access token validation and pre-signed url

我有一个 Web API 2 OData v3 服务,该服务通过 IdentityServer 不记名令牌身份验证/访问令牌验证进行保护。客户端是 SPA 应用程序。我成功地使用 oidc-token-manager.js 库进行身份验证,并将授权 http header 中的访问令牌传递给使用 XMLHttpRequest 的常规 odata crud 操作。

我的 odata 服务也支持流式上传和下载文件。同样,为了上传文件,我可以使用 XMLHttpRequest 在授权 http header 中传递访问令牌。

但是,要下载文件,我想使用带有 href 的锚标记(odata 文件下载 url 通常采用 /odata/myfiles(1)/$value 格式)。当用户单击 link 时,它应该下载文件(odata 服务向响应添加 content-disposition 附件 header)。

但是,无法在授权 header 中为此 GET 请求添加访问令牌,因为它是由浏览器创建的。是否可以将访问令牌作为查询字符串添加到 href 中的 url(so-called 预签名 url)?这甚至是一个好(安全)的想法吗?在我的 Startup.cs 中使用 app.UseIdentityServerBearerTokenAuthentication 的服务器上,这是否能够在查询字符串中查找访问令牌以及授权 http header?

非常感谢

雷姆科

您可以注册一个 "Provider" 来控制令牌预期放置位置的逻辑。例如:

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
    // locate the access token from somewhere else
    Provider = new OAuthBearerAuthenticationProvider
    {
        OnRequestToken = async ctx =>
        {
            ctx.Token = await YourCodeToFindTokenInQueryString(ctx.OwinContext.Environment);
        }
    },

   //
};