我正在使用当前从使用 cookie 身份验证切换到身份服务器的系统。应用程序的前端是一个使用 KnockoutJS 的 SPA。SPA 可以访问其内容的 WebAPI 范围。
我们目前有代码允许 SPA 获取 Identity Server 的不记名令牌,并对 API 进行 ajax 调用,并在 Authentication 标头中传递令牌。我们现在遇到的问题是如何替换一些之前直接链接到 WebAPI 的图像标签 src 属性。
一个例子是:
<img alt="Secure image" src="/api/username/secureimage?v=1464277579255" />
这是使用类似于以下方法的方法签名与 web api 交谈(为这篇文章删减)
[HttpGet("")]
[Route("api/{username}/[controller]")]
public async Task<IActionResult> SecureImage(string username)
{
var secureImage = await _manager.GetSecureImageAsync(username);
if (secureImage != null)
return File(secureImage.FileName, secureImage.ContentType);
return HttpNotFound();
}
我们看到的一种方法是更改 API 以返回 base64 编码图像并使用 ajax 请求图像字符串,然后可以将其设置为 src,例如
<img alt="Embedded Image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />
这不是我们当前系统的一个选项,因为使用这种方法可以显示的图像文件有大小限制(这似乎因浏览器而异),而且我们的许多图像对于这种方法来说太大了。
有没有其他方法可以安全地将大图像传递给浏览器?