1

我有一个 Web API 2 OData v3 服务,它通过 IdentityServer Bearer Token Authentication / Access Token Validation 得到保护。客户端是一个 SPA 应用程序。我成功地使用 oidc-token-manager.js 库进行身份验证,并将 Authorization http 标头中的访问令牌传递给使用 XMLHttpRequest 的常规 odata crud 操作。

我的 odata 服务还支持用于上传和下载文件的流媒体。同样,对于上传文件,我可以使用 XMLHttpRequest 在 Authorization http 标头中传递访问令牌。

但是,要下载文件,我想使用带有 href 的锚标记(odata 文件下载 url 通常采用 /odata/myfiles(1)/$value 格式)。当用户单击链接时,它应该下载文件(odata 服务将内容处置附件标头添加到响应中)。

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

非常感谢

雷姆科

4

1 回答 1

1

您可以注册一个“提供者”来控制令牌预期位置的逻辑。例如:

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

   //
};
于 2016-03-23T15:57:32.690 回答