我在域上有一个客户端应用程序,在域上client-domain.com
有一个服务器端应用程序server-domain.com
.服务器端有一个API.客户端应用程序将AJAX请求发送到服务器端应用程序.我使用基于令牌的身份验证,因此客户端应用程序在每个AJAX请求的头文件中发送令牌,例如:"授权:承载{某些令牌}".当我需要获取或发布一些数据时,它可以很好地处理AJAX请求.
但服务器端API也保留文件.例如图像.文件是私有的,只有经过身份验证的用户才能获取它们.我需要在标签的客户端显示这些图像.我无法使用它们,
因为在这种情况下,浏览器不会向服务器端发送Authorization标头.
采用的解决方案是什么?客户端应用程序如何从服务器端API加载图像?
有三种解决方法,最好的解决方法是使用签名的URL
第一种方法只是使用签名哈希参数创建一个无需身份验证(匿名访问)的路由,该哈希参数指示是否可以加载资源。
服务器收到请求后,如果尚未达到到期时间,则必须验证guid,当然,请检查guid是否为有效签名。
多个文件/文档服务器(例如Dropbox,S3,CDN提供程序等)使用此方法。
在某些公司中查看该技术。
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html#private-content-overview-choosing-duration
https://client.cdn77.com/support/knowledgebase/cdn-resource/how-do-i-set-up-signed-urls
第二种方法是通过带有图像URL的querystring传递令牌。
建议不要使用此方法,因为要清楚公开URL,并且许多服务器有时会编写和公开所访问URL的公共日志。不幸的是,JWT通常向用户公开,用户可以进一步控制许多功能来进一步加载图像。
服务器收到请求后,必须通过querystring验证令牌,并使用内容进行响应。
第三种方法创建一个经过身份验证的cookie来验证图像的访问。
不建议使用此方法,因为该方法超出了API模式(通常基于Webapi /令牌的身份验证)。
服务器收到请求后,您需要验证验证cookie是否有效。