{"id":21487,"date":"2017-03-08T16:03:58","date_gmt":"2017-03-08T16:03:58","guid":{"rendered":"http:\/\/protecting_images_and_videos_via_cookie_based_authentication"},"modified":"2024-08-22T10:28:26","modified_gmt":"2024-08-22T17:28:26","slug":"protecting_images_and_videos_via_cookie_based_authentication","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication","title":{"rendered":"Protecting images and videos via cookie-based authentication and Cloudinary"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Controlling who can access your images and videos, and when, can be an important concern for your business and security workflow. You may have resources that you only want some of your users or employees to access, or you may need to make sure that your original resources are secure, and only transformed (edited) versions of your resources are delivered, e.g., with a watermark or logo displayed.<\/p>\n<p>Cloudinary prides itself on the wide range of transformations available via dynamic URLs, and there are huge benefits to using on-the-fly dynamic transformations to deliver your public resources. But this flexibility for delivering resources may be too permissive in certain situations because simply changing or removing a dynamic Cloudinary URL parameter can deliver a new image on-the-fly. This can result in users tweaking a URL in order to access the original version of images, for example to view an image <em>without<\/em> the added watermark, minus the cropping parameters that have isolated a specific face in the image, or without the <code>pixelate_faces<\/code> effect hiding people\u2019s identity, etc.<\/p>\n<p>To provide more control over access to your images, Cloudinary offers out-of-the-box support for <a href=\"https:\/\/cloudinary.com\/documentation\/upload_images#authenticated_assets\">uploading resources as authenticated<\/a>. By default, these authenticated resources can only be accessed with a signed delivery URL: a dynamic URL with a signature that must be validated before the resource is delivered. The signature is based on all the dynamic parameters included in the URL, so changing any parameter or value in the URL will invalidate the signature and thus access to the requested resource will be denied.<\/p>\n<p>An example of the single line of code needed for uploading an image as authenticated:<\/p>\n<cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;Cloudinary::Uploader.upload(\\&quot;bag.jpg\\&quot;, \\n    :type =&gt; :authenticated)&quot;,&quot;codeSnippet&quot;:&quot;Cloudinary::Uploader.upload(\\&quot;bag.jpg\\&quot;, \\n    :type =&gt; :authenticated)&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;rawCodeSnippet&quot;:&quot;\\\\Cloudinary\\\\Uploader::upload(\\&quot;bag.jpg\\&quot;, \\n    array(\\&quot;type\\&quot; =&gt; \\&quot;authenticated\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;\\\\Cloudinary\\\\Uploader::upload(\\&quot;bag.jpg\\&quot;, \\n    array(\\&quot;type\\&quot; =&gt; \\&quot;authenticated\\&quot;));&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;bag.jpg\\&quot;, \\n    type = \\&quot;authenticated\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;bag.jpg\\&quot;, \\n    type = \\&quot;authenticated\\&quot;)&quot;},{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;javascript&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.v2.uploader.upload(\\&quot;bag.jpg\\&quot;, \\n    { type: \\&quot;authenticated\\&quot; }, \\n    function(error, result) {console.log(result); });&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.v2.uploader.upload(\\&quot;bag.jpg\\&quot;, \\n    { type: \\&quot;authenticated\\&quot; }, \\n    function(error, result) {console.log(result); });&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.uploader().upload(\\&quot;bag.jpg\\&quot;, \\n    ObjectUtils.asMap(\\&quot;type\\&quot;, \\&quot;authenticated\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.uploader().upload(\\&quot;bag.jpg\\&quot;, \\n    ObjectUtils.asMap(\\&quot;type\\&quot;, \\&quot;authenticated\\&quot;));&quot;}]\"\n      parsed-url=\"[]\"\n      with-url=\"false\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget>\n<p>An example of the single line of code needed to deliver an authenticated image (also scaled to a width of 300 pixels). Note the signature component in the resulting URL (automatically added when using our SDKs):<\/p>\n<p><cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;nodejs&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(\\&quot;bag.jpg\\&quot;, {width: 300, crop: \\&quot;scale\\&quot;, sign_url: true, type: \\&quot;authenticated\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;bag.jpg\\&quot;, {width: 300, crop: \\&quot;scale\\&quot;, sign_url: true, type: \\&quot;authenticated\\&quot;})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_2&quot;,&quot;framework&quot;:&quot;react_2&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;react&quot;,&quot;framework&quot;:&quot;react&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;bag.jpg\\&quot; signUrl=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt; &lt;Transformation width=\\&quot;300\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt; &lt;\\\/Image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;bag.jpg\\&quot; signUrl=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt;\\n\\t&lt;Transformation width=\\&quot;300\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt;\\n&lt;\\\/Image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;cloudinary-react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue_2&quot;,&quot;framework&quot;:&quot;vue_2&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/vue&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue&quot;,&quot;framework&quot;:&quot;vue&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;bag.jpg\\&quot; sign-url=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt; &lt;cld-transformation width=\\&quot;300\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt; &lt;\\\/cld-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;bag.jpg\\&quot; sign-url=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt;\\n\\t&lt;cld-transformation width=\\&quot;300\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt;\\n&lt;\\\/cld-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;cloudinary-vue&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular_2&quot;,&quot;framework&quot;:&quot;angular_2&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/ng&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular&quot;,&quot;framework&quot;:&quot;angular&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;bag.jpg\\&quot; sign-url=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt; &lt;cl-transformation width=\\&quot;300\\&quot; crop=\\&quot;scale\\&quot;&gt; &lt;\\\/cl-transformation&gt; &lt;\\\/cl-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;bag.jpg\\&quot; sign-url=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt;\\n\\t&lt;cl-transformation width=\\&quot;300\\&quot; crop=\\&quot;scale\\&quot;&gt;\\n\\t&lt;\\\/cl-transformation&gt;\\n&lt;\\\/cl-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/angular-5.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js_2&quot;,&quot;framework&quot;:&quot;js_2&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js&quot;,&quot;framework&quot;:&quot;js&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.imageTag(&#039;bag.jpg&#039;, {width: 300, crop: \\&quot;scale\\&quot;, signUrl: true, type: \\&quot;authenticated\\&quot;}).toHtml();&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.imageTag(&#039;bag.jpg&#039;, {width: 300, crop: \\&quot;scale\\&quot;, signUrl: true, type: \\&quot;authenticated\\&quot;}).toHtml();&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;cloudinary-core&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;rawCodeSnippet&quot;:&quot;CloudinaryImage(\\&quot;bag.jpg\\&quot;).image(width=300, crop=\\&quot;scale\\&quot;, sign_url=True, type=\\&quot;authenticated\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;CloudinaryImage(\\&quot;bag.jpg\\&quot;).image(width=300, crop=\\&quot;scale\\&quot;, sign_url=True, type=\\&quot;authenticated\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;php_2&quot;,&quot;framework&quot;:&quot;php_2&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;(new ImageTag(&#039;bag.jpg&#039;))\\n\\t-&gt;resize(Resize::scale()-&gt;width(300))\\n\\t-&gt;sign()\\n\\t-&gt;deliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;(new ImageTag(&#039;bag.jpg&#039;))\\n\\t-&gt;resize(Resize::scale()-&gt;width(300))\\n\\t-&gt;sign()\\n\\t-&gt;deliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;bag.jpg\\&quot;, array(\\&quot;width\\&quot;=&gt;300, \\&quot;crop\\&quot;=&gt;\\&quot;scale\\&quot;, \\&quot;sign_url\\&quot;=&gt;true, \\&quot;type\\&quot;=&gt;\\&quot;authenticated\\&quot;))&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;bag.jpg\\&quot;, array(\\&quot;width\\&quot;=&gt;300, \\&quot;crop\\&quot;=&gt;\\&quot;scale\\&quot;, \\&quot;sign_url\\&quot;=&gt;true, \\&quot;type\\&quot;=&gt;\\&quot;authenticated\\&quot;))&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().width(300).crop(\\&quot;scale\\&quot;)).signed(true).type(\\&quot;authenticated\\&quot;).imageTag(\\&quot;bag.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().width(300).crop(\\&quot;scale\\&quot;)).signed(true).type(\\&quot;authenticated\\&quot;).imageTag(\\&quot;bag.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;bag.jpg\\&quot;, width: 300, crop: \\&quot;scale\\&quot;, sign_url: true, type: \\&quot;authenticated\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;bag.jpg\\&quot;, width: 300, crop: \\&quot;scale\\&quot;, sign_url: true, type: \\&quot;authenticated\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;csharp&quot;,&quot;framework&quot;:&quot;csharp&quot;,&quot;language&quot;:&quot;csharp&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Width(300).Crop(\\&quot;scale\\&quot;)).Signed(true).Action(\\&quot;authenticated\\&quot;).BuildImageTag(\\&quot;bag.jpg\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Width(300).Crop(\\&quot;scale\\&quot;)).Signed(true).Action(\\&quot;authenticated\\&quot;).BuildImageTag(\\&quot;bag.jpg\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;.NET&quot;,&quot;packageName&quot;:&quot;CloudinaryDotNet&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;dart&quot;,&quot;framework&quot;:&quot;dart&quot;,&quot;language&quot;:&quot;dart&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;bag.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(300))\\n\\t.setSignature(\\&quot;8_TXHRoM\\&quot;)\\n\\t.setDeliveryType(\\&quot;authenticated\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;bag.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(300))\\n\\t.setSignature(\\&quot;8_TXHRoM\\&quot;)\\n\\t.setDeliveryType(\\&quot;authenticated\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Dart&quot;,&quot;packageName&quot;:&quot;cloudinary_dart&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;swift&quot;,&quot;framework&quot;:&quot;swift&quot;,&quot;language&quot;:&quot;swift&quot;,&quot;rawCodeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setType( \\&quot;authenticated\\&quot;).setTransformation(CLDTransformation().setWidth(300).setCrop(\\&quot;scale\\&quot;)).generate(\\&quot;bag.jpg\\&quot;, signUrl: true)!, cloudinary: cloudinary)&quot;,&quot;codeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setType( \\&quot;authenticated\\&quot;).setTransformation(CLDTransformation().setWidth(300).setCrop(\\&quot;scale\\&quot;)).generate(\\&quot;bag.jpg\\&quot;, signUrl: true)!, cloudinary: cloudinary)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;iOS&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;5.x&quot;},{&quot;sdkId&quot;:&quot;android&quot;,&quot;framework&quot;:&quot;android&quot;,&quot;language&quot;:&quot;android&quot;,&quot;rawCodeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().width(300).crop(\\&quot;scale\\&quot;)).signed(true).type(\\&quot;authenticated\\&quot;).generate(\\&quot;bag.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().width(300).crop(\\&quot;scale\\&quot;)).signed(true).type(\\&quot;authenticated\\&quot;).generate(\\&quot;bag.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Android&quot;,&quot;packageName&quot;:&quot;cloudinary-android&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;flutter&quot;,&quot;framework&quot;:&quot;flutter&quot;,&quot;language&quot;:&quot;flutter&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;bag.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(300))\\n\\t.setSignature(\\&quot;8_TXHRoM\\&quot;)\\n\\t.setDeliveryType(\\&quot;authenticated\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;bag.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(300))\\n\\t.setSignature(\\&quot;8_TXHRoM\\&quot;)\\n\\t.setDeliveryType(\\&quot;authenticated\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Flutter&quot;,&quot;packageName&quot;:&quot;cloudinary_flutter&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;kotlin&quot;,&quot;framework&quot;:&quot;kotlin&quot;,&quot;language&quot;:&quot;kotlin&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;bag.jpg\\&quot;)\\n\\t resize(Resize.scale() { width(300) })\\n\\t signature()\\n\\t deliveryType(\\&quot;authenticated\\&quot;) \\n}.generate()&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;bag.jpg\\&quot;)\\n\\t resize(Resize.scale() { width(300) })\\n\\t signature()\\n\\t deliveryType(\\&quot;authenticated\\&quot;) \\n}.generate()&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Kotlin&quot;,&quot;packageName&quot;:&quot;kotlin-url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;jquery&quot;,&quot;framework&quot;:&quot;jquery&quot;,&quot;language&quot;:&quot;jquery&quot;,&quot;rawCodeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;bag.jpg\\&quot;, {width: 300, crop: \\&quot;scale\\&quot;, type: \\&quot;authenticated\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;bag.jpg\\&quot;, {width: 300, crop: \\&quot;scale\\&quot;, type: \\&quot;authenticated\\&quot;})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;jQuery&quot;,&quot;packageName&quot;:&quot;cloudinary-jquery&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_native&quot;,&quot;framework&quot;:&quot;react_native&quot;,&quot;language&quot;:&quot;react_native&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;bag.jpg\\&quot;)\\n  .resize(scale().width(300))\\n  .setSignature(\\&quot;8_TXHRoM\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React Native&quot;,&quot;packageName&quot;:&quot;cloudinary-react-native&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;}]\"\n      parsed-url=\"{&quot;url&quot;:&quot;https:\\\/\\\/res.cloudinary.com\\\/demo\\\/image\\\/authenticated\\\/s--8_TXHRoM--\\\/c_scale,w_300\\\/bag.jpg&quot;,&quot;cloud_name&quot;:&quot;demo&quot;,&quot;host&quot;:&quot;res.cloudinary.com&quot;,&quot;type&quot;:&quot;authenticated&quot;,&quot;resource_type&quot;:&quot;image&quot;,&quot;transformation&quot;:[{&quot;crop_mode&quot;:&quot;scale&quot;,&quot;width&quot;:&quot;300&quot;}],&quot;transformation_string&quot;:&quot;c_scale,w_300&quot;,&quot;url_suffix&quot;:&quot;&quot;,&quot;version&quot;:&quot;&quot;,&quot;secure&quot;:true,&quot;public_id&quot;:&quot;bag.jpg&quot;,&quot;extension&quot;:&quot;jpg&quot;,&quot;format&quot;:&quot;jpg&quot;,&quot;format_code&quot;:true,&quot;url_code&quot;:false,&quot;signature&quot;:&quot;8_TXHRoM&quot;,&quot;private_cdn&quot;:false,&quot;result_asset_type&quot;:&quot;image&quot;}\"\n      with-url=\"true\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget><\/p>\n<p>The signed delivery method described above may meet your authentication needs in many cases, but what if you want to limit access to your resources to a particular IP address, or to specific users, or for a limited time until they are released? In order to support more advanced requirements for authentication, Cloudinary has added new authentication functionality:<\/p>\n<ul>\n<li>\n<code>Token-based<\/code> authentication, providing IP restrictions and time-limited URLs.<\/li>\n<li>\n<code>Cookie-based<\/code> authentication, restricting access to users with a valid cookie.<\/li>\n<\/ul>\n<h2>Token-based authentication<\/h2>\n<p>When you need to control which devices have access to an image, the basic signed URL solution may not be enough.<\/p>\n<p>Suppose you have images of products that have not been released yet, or user uploaded images that should not be publicly available (e.g., signed contracts). In this case, you would want to allow access only for your employees, or in effect, restrict requests to only those that have been initiated from within your network (a static IP address). That\u2019s where token-based authentication comes in.<\/p>\n<p>An authentication token is added as a set of query parameters to the image delivery URL, and is used for validation before delivering the image. Generating the token-based authentication URL is as simple as adding the <code>sign_url<\/code> parameter (set to <code>true<\/code>) and the <code>auth_token<\/code> parameter in your SDK resource delivery method. The <code>auth_token<\/code> parameter includes the details that limit access, which in our example would include values for the permitted <code>ip<\/code> and the encryption <code>key<\/code> you receive from Cloudinary.<\/p>\n<p>For example, to deliver the \u201ccontract123\u201d image only if the requesting IP address is 22.33.22.11:<\/p>\n<cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;contract123.jpg\\&quot;, :sign_url =&gt; true, :auth_token =&gt; { \\n  :key =&gt; \\&quot;MyKey\\&quot;, :ip =&gt; \\&quot;22.33.22.11\\&quot;}, :type =&gt; \\&quot;authenticated\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;contract123.jpg\\&quot;, :sign_url =&gt; true, :auth_token =&gt; { \\n  :key =&gt; \\&quot;MyKey\\&quot;, :ip =&gt; \\&quot;22.33.22.11\\&quot;}, :type =&gt; \\&quot;authenticated\\&quot;)&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;contract123.jpg\\&quot;,  array(\\&quot;auth_token\\&quot; =&gt; array(\\n  \\&quot;key\\&quot; =&gt; \\&quot;MyKey\\&quot;,  \\&quot;ip\\&quot; =&gt; \\&quot;22.33.22.11\\&quot;), \\&quot;type\\&quot; =&gt; \\&quot;authenticated\\&quot;,  \\n  \\&quot;sign_url\\&quot; =&gt; true));&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;contract123.jpg\\&quot;,  array(\\&quot;auth_token\\&quot; =&gt; array(\\n  \\&quot;key\\&quot; =&gt; \\&quot;MyKey\\&quot;,  \\&quot;ip\\&quot; =&gt; \\&quot;22.33.22.11\\&quot;), \\&quot;type\\&quot; =&gt; \\&quot;authenticated\\&quot;,  \\n  \\&quot;sign_url\\&quot; =&gt; true));&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.CloudinaryImage(\\&quot;contract123.jpg\\&quot;).image(\\n  type = \\&quot;authenticated\\&quot;, auth_token = dict(ip = \\&quot;22.33.22.11\\&quot;, \\n  key = \\&quot;MyKey\\&quot;), sign_url = true)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.CloudinaryImage(\\&quot;contract123.jpg\\&quot;).image(\\n  type = \\&quot;authenticated\\&quot;, auth_token = dict(ip = \\&quot;22.33.22.11\\&quot;, \\n  key = \\&quot;MyKey\\&quot;), sign_url = true)&quot;},{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;javascript&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(\\&quot;contract123.jpg\\&quot;,  { type: \\&quot;authenticated\\&quot;,  \\n  auth_token: {key: \\&quot;MyKey\\&quot;, ip: \\&quot;22.33.22.11\\&quot; }, sign_url: true })&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;contract123.jpg\\&quot;,  { type: \\&quot;authenticated\\&quot;,  \\n  auth_token: {key: \\&quot;MyKey\\&quot;, ip: \\&quot;22.33.22.11\\&quot; }, sign_url: true })&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().\\n  type(\\&quot;authenticated\\&quot;).authToken(new AuthToken(\\&quot;MyKey\\&quot;).\\n  ip(\\&quot;22.33.22.11\\&quot;).signed(true)).imageTag(\\&quot;contract123.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().\\n  type(\\&quot;authenticated\\&quot;).authToken(new AuthToken(\\&quot;MyKey\\&quot;).\\n  ip(\\&quot;22.33.22.11\\&quot;).signed(true)).imageTag(\\&quot;contract123.jpg\\&quot;);&quot;}]\"\n      parsed-url=\"[]\"\n      with-url=\"false\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget>\n<h2>Cookie-based authentication<\/h2>\n<p>What if you also need fine-grained control over not only the device accessing specific resources or when they are available, but also the specific person or people accessing them?<\/p>\n<p>For example, let\u2019s say you are developing a website that has a membership-only section for registered users. The registered users have access to images and videos that should not be available to your \u2018regular\u2019 visitors. You also want to grant access for up to 1 hour while ensuring that your registered users can\u2019t just share an image URL with non-members. In this case you will want to use the <a href=\"\/documentation\/control_access_to_media#cookie_based_authentication\">cookie-based authentication<\/a> feature, which expands on the functionality of token-based authentication, enabling you to limit the delivery of authenticated images only to users with a valid cookie. The validity of the cookie can be matched with the user\u2019s session expiration and can include an Access Control List (ACL) for configuring the URL path where the cookie can be used (e.g., \/image\/authenticated\/*). As with token-based authentication, you can also limit the cookie by IP address and\/or time.<\/p>\n<p>In the example above, when a user logs in to the membership section of your website, you would generate a cookie for the user that allows him to view your \u201cauthenticated\u201d images. But if anyone without the cookie tried to open the same image URL they would get an error.<\/p>\n<p><strong>Example<\/strong>: To create a cookie that is valid for 60 minutes, allows access to all of your authenticated images, and is signed with MY_KEY:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">tokenOptions  =  { \n  :<span class=\"hljs-function\"><span class=\"hljs-params\">key<\/span> =&gt;<\/span> <span class=\"hljs-string\">\"MY_KEY\"<\/span>, \n  :<span class=\"hljs-function\"><span class=\"hljs-params\">duration<\/span> =&gt;<\/span> <span class=\"hljs-number\">3600<\/span>, \n  :<span class=\"hljs-function\"><span class=\"hljs-params\">acl<\/span> =&gt;<\/span> <span class=\"hljs-string\">\"\/image\/authenticated\/*\"<\/span>\n}\ncookieToken = Cloudinary::Utils.generate_auth_token(tokenOptions)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Cookies with transformations<\/h2>\n<p>The flexibility of cookie-based authentication also provides a means for customizing the access for every user that logs into your system. As Cloudinary uses dynamic URLs to deliver your resources, the Access Control List path in the cookie can include transformations that are custom-tailored with details specific to your company, for example, adding the company logo as an overlay on an image (e.g., \/image\/authenticated\/l_logo.png\/*). That means that the cookie can only be used to authenticate URLs that include the given transformation.<\/p>\n<p>For example, you could set the ACL in the cookie so that it authorizes all images with a width of 700 pixels and a company logo in the top right corner:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">:<span class=\"hljs-function\"><span class=\"hljs-params\">acl<\/span> =&gt;<\/span> <span class=\"hljs-string\">\"\/image\/authenticated\/w_700\/l_logo,g_north_east\/*\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>To simplify the effort, you can group any set of transformations as a <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations\">named transformation<\/a> and then simply add the named transformation to the ACL. For example, adding a named transformation called \u201cauthorized\u201d to the ACL, where \u201cauthorized\u201d has been set to the transformations mentioned above: (<code>w_700\/l_logo,g_north_east<\/code>).<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">:<span class=\"hljs-function\"><span class=\"hljs-params\">acl<\/span> =&gt;<\/span> <span class=\"hljs-string\">\"\/image\/authenticated\/t_authorized\/*\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Cookies and user-specific transformations<\/h2>\n<p>One of the potential drawbacks of delivering even authenticated images is the ease with which the recipient can simply save the image to their computer and potentially pass it on to anyone else. This can be especially problematic if your company needs specific people to view your resources, but the resources also need to be kept private from others for a variety of reasons, for example, images of pre-released products. To help safeguard against any \u201cleaks\u201d, you can provide a means of tracing where the image originated.<\/p>\n<p>Let\u2019s say that John Doe is a product design manager. He needs to have access to all the images being prepared for a planned product release. Here\u2019s an example that allows authentication for any image as long as that person\u2019s name is added as a semi-transparent text overlay, repeated over the entire image.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">:<span class=\"hljs-function\"><span class=\"hljs-params\">acl<\/span> =&gt;<\/span> <span class=\"hljs-string\">\"\/image\/authenticated\/a_-25,o_6,l_text:Arial_25_bold:\"<\/span> \n  + current_user + <span class=\"hljs-string\">\"\/fl_tiled.layer_apply\/*\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>So the following image URL will be authenticated for John Doe, but not for any other user:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">https:<span class=\"hljs-comment\">\/\/res.cloudinary.com\/demo\/image\/authenticated\/a_-25,l_text:Arial_25_bold:John%20Doe,o_6\/fl_tiled.layer_apply\/w_800\/cookies.jpg<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p><a class=\"c-image-link\" href=\"https:\/\/res.cloudinary.com\/demo\/image\/authenticated\/s--s5XtdYrE--\/a_-25,l_text:Arial_25_bold:John%20Doe,o_6\/fl_tiled.layer_apply\/c_scale,w_800\/cookies.jpg\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/authenticated\/s--s5XtdYrE--\/a_-25,l_text:Arial_25_bold:John%20Doe,o_6\/fl_tiled.layer_apply\/c_scale,w_800\/cookies.jpg\" alt=\"authenticated overlay\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"800\" height=\"533\"\/><\/a><\/p>\n<p><cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;nodejs&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(\\&quot;cookies.jpg\\&quot;, {sign_url: true, type: \\&quot;authenticated\\&quot;, transformation: [ {angle: -25, overlay: {font_family: \\&quot;Arial\\&quot;, font_size: 25, font_weight: \\&quot;bold\\&quot;, text: \\&quot;John%20Doe\\&quot;}, opacity: 6}, {flags: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} ]})&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;cookies.jpg\\&quot;, {sign_url: true, type: \\&quot;authenticated\\&quot;, transformation: [\\n  {angle: -25, overlay: {font_family: \\&quot;Arial\\&quot;, font_size: 25, font_weight: \\&quot;bold\\&quot;, text: \\&quot;John%20Doe\\&quot;}, opacity: 6},\\n  {flags: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]}\\n  ]})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_2&quot;,&quot;framework&quot;:&quot;react_2&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;react&quot;,&quot;framework&quot;:&quot;react&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;cookies.jpg\\&quot; signUrl=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt; &lt;Transformation angle=\\&quot;-25\\&quot; overlay={{fontFamily: \\&quot;Arial\\&quot;, fontSize: 25, fontWeight: \\&quot;bold\\&quot;, text: \\&quot;John%20Doe\\&quot;}} opacity=\\&quot;6\\&quot; \\\/&gt; &lt;Transformation flags={[\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} \\\/&gt; &lt;\\\/Image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;cookies.jpg\\&quot; signUrl=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt;\\n\\t&lt;Transformation angle=\\&quot;-25\\&quot; overlay={{fontFamily: \\&quot;Arial\\&quot;, fontSize: 25, fontWeight: \\&quot;bold\\&quot;, text: \\&quot;John%20Doe\\&quot;}} opacity=\\&quot;6\\&quot; \\\/&gt;\\n\\t&lt;Transformation flags={[\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} \\\/&gt;\\n&lt;\\\/Image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;cloudinary-react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue_2&quot;,&quot;framework&quot;:&quot;vue_2&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/vue&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue&quot;,&quot;framework&quot;:&quot;vue&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;cookies.jpg\\&quot; sign-url=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt; &lt;cld-transformation angle=\\&quot;-25\\&quot; :overlay=\\&quot;{fontFamily: &#039;Arial&#039;, fontSize: 25, fontWeight: &#039;bold&#039;, text: &#039;John%20Doe&#039;}\\&quot; opacity=\\&quot;6\\&quot; \\\/&gt; &lt;cld-transformation flags={[\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} \\\/&gt; &lt;\\\/cld-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;cookies.jpg\\&quot; sign-url=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt;\\n\\t&lt;cld-transformation angle=\\&quot;-25\\&quot; :overlay=\\&quot;{fontFamily: &#039;Arial&#039;, fontSize: 25, fontWeight: &#039;bold&#039;, text: &#039;John%20Doe&#039;}\\&quot; opacity=\\&quot;6\\&quot; \\\/&gt;\\n\\t&lt;cld-transformation flags={[\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} \\\/&gt;\\n&lt;\\\/cld-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;cloudinary-vue&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular_2&quot;,&quot;framework&quot;:&quot;angular_2&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/ng&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular&quot;,&quot;framework&quot;:&quot;angular&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;cookies.jpg\\&quot; sign-url=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt; &lt;cl-transformation angle=\\&quot;-25\\&quot; overlay=\\&quot;text:Arial_25_bold:John%20Doe\\&quot; opacity=\\&quot;6\\&quot;&gt; &lt;\\\/cl-transformation&gt; &lt;cl-transformation flags={{[\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]}}&gt; &lt;\\\/cl-transformation&gt; &lt;\\\/cl-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;cookies.jpg\\&quot; sign-url=\\&quot;true\\&quot; type=\\&quot;authenticated\\&quot;&gt;\\n\\t&lt;cl-transformation angle=\\&quot;-25\\&quot; overlay=\\&quot;text:Arial_25_bold:John%20Doe\\&quot; opacity=\\&quot;6\\&quot;&gt;\\n\\t&lt;\\\/cl-transformation&gt;\\n\\t&lt;cl-transformation flags={{[\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]}}&gt;\\n\\t&lt;\\\/cl-transformation&gt;\\n&lt;\\\/cl-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/angular-5.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js_2&quot;,&quot;framework&quot;:&quot;js_2&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js&quot;,&quot;framework&quot;:&quot;js&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.imageTag(&#039;cookies.jpg&#039;, {signUrl: true, type: \\&quot;authenticated\\&quot;, transformation: [ {angle: -25, overlay: new cloudinary.TextLayer().fontFamily(\\&quot;Arial\\&quot;).fontSize(25).fontWeight(\\&quot;bold\\&quot;).text(\\&quot;John%20Doe\\&quot;), opacity: 6}, {flags: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} ]}).toHtml();&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.imageTag(&#039;cookies.jpg&#039;, {signUrl: true, type: \\&quot;authenticated\\&quot;, transformation: [\\n  {angle: -25, overlay: new cloudinary.TextLayer().fontFamily(\\&quot;Arial\\&quot;).fontSize(25).fontWeight(\\&quot;bold\\&quot;).text(\\&quot;John%20Doe\\&quot;), opacity: 6},\\n  {flags: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]}\\n  ]}).toHtml();&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;cloudinary-core&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;rawCodeSnippet&quot;:&quot;CloudinaryImage(\\&quot;cookies.jpg\\&quot;).image(sign_url=True, type=\\&quot;authenticated\\&quot;, transformation=[ {&#039;angle&#039;: -25, &#039;overlay&#039;: {&#039;font_family&#039;: \\&quot;Arial\\&quot;, &#039;font_size&#039;: 25, &#039;font_weight&#039;: \\&quot;bold\\&quot;, &#039;text&#039;: \\&quot;John%20Doe\\&quot;}, &#039;opacity&#039;: 6}, {&#039;flags&#039;: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} ])&quot;,&quot;codeSnippet&quot;:&quot;CloudinaryImage(\\&quot;cookies.jpg\\&quot;).image(sign_url=True, type=\\&quot;authenticated\\&quot;, transformation=[\\n  {&#039;angle&#039;: -25, &#039;overlay&#039;: {&#039;font_family&#039;: \\&quot;Arial\\&quot;, &#039;font_size&#039;: 25, &#039;font_weight&#039;: \\&quot;bold\\&quot;, &#039;text&#039;: \\&quot;John%20Doe\\&quot;}, &#039;opacity&#039;: 6},\\n  {&#039;flags&#039;: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]}\\n  ])&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;php_2&quot;,&quot;framework&quot;:&quot;php_2&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;(new ImageTag(&#039;cookies.jpg&#039;))\\n\\t-&gt;overlay(Overlay::source(\\n\\tSource::text(\\&quot;John Doe\\&quot;,(new TextStyle(\\&quot;Arial\\&quot;,25))\\n\\t-&gt;fontWeight(\\n\\tFontWeight::bold())\\n\\t)\\n\\t-&gt;transformation((new Transformation())\\n\\t-&gt;rotate(Rotate::byAngle(-25))\\n\\t-&gt;adjust(Adjust::opacity(6)))\\n\\t)\\n\\t-&gt;position((new Position())\\n\\t-&gt;tiled()\\n\\t)\\n\\t)\\n\\t-&gt;sign()\\n\\t-&gt;deliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;(new ImageTag(&#039;cookies.jpg&#039;))\\n\\t-&gt;overlay(Overlay::source(\\n\\tSource::text(\\&quot;John Doe\\&quot;,(new TextStyle(\\&quot;Arial\\&quot;,25))\\n\\t-&gt;fontWeight(\\n\\tFontWeight::bold())\\n\\t)\\n\\t-&gt;transformation((new Transformation())\\n\\t-&gt;rotate(Rotate::byAngle(-25))\\n\\t-&gt;adjust(Adjust::opacity(6)))\\n\\t)\\n\\t-&gt;position((new Position())\\n\\t-&gt;tiled()\\n\\t)\\n\\t)\\n\\t-&gt;sign()\\n\\t-&gt;deliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;cookies.jpg\\&quot;, array(\\&quot;sign_url\\&quot;=&gt;true, \\&quot;type\\&quot;=&gt;\\&quot;authenticated\\&quot;, \\&quot;transformation\\&quot;=&gt;array( array(\\&quot;angle\\&quot;=&gt;-25, \\&quot;overlay\\&quot;=&gt;array(\\&quot;font_family\\&quot;=&gt;\\&quot;Arial\\&quot;, \\&quot;font_size\\&quot;=&gt;25, \\&quot;font_weight\\&quot;=&gt;\\&quot;bold\\&quot;, \\&quot;text\\&quot;=&gt;\\&quot;John%20Doe\\&quot;), \\&quot;opacity\\&quot;=&gt;6), array(\\&quot;flags\\&quot;=&gt;array(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)) )))&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;cookies.jpg\\&quot;, array(\\&quot;sign_url\\&quot;=&gt;true, \\&quot;type\\&quot;=&gt;\\&quot;authenticated\\&quot;, \\&quot;transformation\\&quot;=&gt;array(\\n  array(\\&quot;angle\\&quot;=&gt;-25, \\&quot;overlay\\&quot;=&gt;array(\\&quot;font_family\\&quot;=&gt;\\&quot;Arial\\&quot;, \\&quot;font_size\\&quot;=&gt;25, \\&quot;font_weight\\&quot;=&gt;\\&quot;bold\\&quot;, \\&quot;text\\&quot;=&gt;\\&quot;John%20Doe\\&quot;), \\&quot;opacity\\&quot;=&gt;6),\\n  array(\\&quot;flags\\&quot;=&gt;array(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;))\\n  )))&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().angle(-25).overlay(new TextLayer().fontFamily(\\&quot;Arial\\&quot;).fontSize(25).fontWeight(\\&quot;bold\\&quot;).text(\\&quot;John%20Doe\\&quot;)).opacity(6).chain() .flags(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)).signed(true).type(\\&quot;authenticated\\&quot;).imageTag(\\&quot;cookies.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation()\\n  .angle(-25).overlay(new TextLayer().fontFamily(\\&quot;Arial\\&quot;).fontSize(25).fontWeight(\\&quot;bold\\&quot;).text(\\&quot;John%20Doe\\&quot;)).opacity(6).chain()\\n  .flags(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)).signed(true).type(\\&quot;authenticated\\&quot;).imageTag(\\&quot;cookies.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;cookies.jpg\\&quot;, sign_url: true, type: \\&quot;authenticated\\&quot;, transformation: [ {angle: -25, overlay: {font_family: \\&quot;Arial\\&quot;, font_size: 25, font_weight: \\&quot;bold\\&quot;, text: \\&quot;John%20Doe\\&quot;}, opacity: 6}, {flags: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} ])&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;cookies.jpg\\&quot;, sign_url: true, type: \\&quot;authenticated\\&quot;, transformation: [\\n  {angle: -25, overlay: {font_family: \\&quot;Arial\\&quot;, font_size: 25, font_weight: \\&quot;bold\\&quot;, text: \\&quot;John%20Doe\\&quot;}, opacity: 6},\\n  {flags: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]}\\n  ])&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;csharp&quot;,&quot;framework&quot;:&quot;csharp&quot;,&quot;language&quot;:&quot;csharp&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Angle(-25).Overlay(new TextLayer().FontFamily(\\&quot;Arial\\&quot;).FontSize(25).FontWeight(\\&quot;bold\\&quot;).Text(\\&quot;John%20Doe\\&quot;)).Opacity(6).Chain() .Flags(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)).Signed(true).Action(\\&quot;authenticated\\&quot;).BuildImageTag(\\&quot;cookies.jpg\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation()\\n  .Angle(-25).Overlay(new TextLayer().FontFamily(\\&quot;Arial\\&quot;).FontSize(25).FontWeight(\\&quot;bold\\&quot;).Text(\\&quot;John%20Doe\\&quot;)).Opacity(6).Chain()\\n  .Flags(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)).Signed(true).Action(\\&quot;authenticated\\&quot;).BuildImageTag(\\&quot;cookies.jpg\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;.NET&quot;,&quot;packageName&quot;:&quot;CloudinaryDotNet&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;dart&quot;,&quot;framework&quot;:&quot;dart&quot;,&quot;language&quot;:&quot;dart&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;cookies.jpg&#039;).transformation(Transformation()\\n\\t.addTransformation(\\&quot;a_-25,l_text:Arial_25_bold:John Doe,o_6\\\/fl_tiled.layer_apply\\&quot;)\\n\\t.setSignature(\\&quot;GOOo0vEj\\&quot;)\\n\\t.setDeliveryType(\\&quot;authenticated\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;cookies.jpg&#039;).transformation(Transformation()\\n\\t.addTransformation(\\&quot;a_-25,l_text:Arial_25_bold:John Doe,o_6\\\/fl_tiled.layer_apply\\&quot;)\\n\\t.setSignature(\\&quot;GOOo0vEj\\&quot;)\\n\\t.setDeliveryType(\\&quot;authenticated\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Dart&quot;,&quot;packageName&quot;:&quot;cloudinary_dart&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;swift&quot;,&quot;framework&quot;:&quot;swift&quot;,&quot;language&quot;:&quot;swift&quot;,&quot;rawCodeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setType( \\&quot;authenticated\\&quot;).setTransformation(CLDTransformation().setAngle(-25).setOverlay(\\&quot;text:Arial_25_bold:John%20Doe\\&quot;).setOpacity(6).chain() .setFlags(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)).generate(\\&quot;cookies.jpg\\&quot;, signUrl: true)!, cloudinary: cloudinary)&quot;,&quot;codeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setType( \\&quot;authenticated\\&quot;).setTransformation(CLDTransformation()\\n  .setAngle(-25).setOverlay(\\&quot;text:Arial_25_bold:John%20Doe\\&quot;).setOpacity(6).chain()\\n  .setFlags(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)).generate(\\&quot;cookies.jpg\\&quot;, signUrl: true)!, cloudinary: cloudinary)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;iOS&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;5.x&quot;},{&quot;sdkId&quot;:&quot;android&quot;,&quot;framework&quot;:&quot;android&quot;,&quot;language&quot;:&quot;android&quot;,&quot;rawCodeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().angle(-25).overlay(new TextLayer().fontFamily(\\&quot;Arial\\&quot;).fontSize(25).fontWeight(\\&quot;bold\\&quot;).text(\\&quot;John%20Doe\\&quot;)).opacity(6).chain() .flags(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)).signed(true).type(\\&quot;authenticated\\&quot;).generate(\\&quot;cookies.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation()\\n  .angle(-25).overlay(new TextLayer().fontFamily(\\&quot;Arial\\&quot;).fontSize(25).fontWeight(\\&quot;bold\\&quot;).text(\\&quot;John%20Doe\\&quot;)).opacity(6).chain()\\n  .flags(\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;)).signed(true).type(\\&quot;authenticated\\&quot;).generate(\\&quot;cookies.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Android&quot;,&quot;packageName&quot;:&quot;cloudinary-android&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;flutter&quot;,&quot;framework&quot;:&quot;flutter&quot;,&quot;language&quot;:&quot;flutter&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;cookies.jpg&#039;).transformation(Transformation()\\n\\t.addTransformation(\\&quot;a_-25,l_text:Arial_25_bold:John Doe,o_6\\\/fl_tiled.layer_apply\\&quot;)\\n\\t.setSignature(\\&quot;GOOo0vEj\\&quot;)\\n\\t.setDeliveryType(\\&quot;authenticated\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;cookies.jpg&#039;).transformation(Transformation()\\n\\t.addTransformation(\\&quot;a_-25,l_text:Arial_25_bold:John Doe,o_6\\\/fl_tiled.layer_apply\\&quot;)\\n\\t.setSignature(\\&quot;GOOo0vEj\\&quot;)\\n\\t.setDeliveryType(\\&quot;authenticated\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Flutter&quot;,&quot;packageName&quot;:&quot;cloudinary_flutter&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;kotlin&quot;,&quot;framework&quot;:&quot;kotlin&quot;,&quot;language&quot;:&quot;kotlin&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;cookies.jpg\\&quot;)\\n\\t overlay(Overlay.source(\\n\\tSource.text(\\&quot;John Doe\\&quot;,TextStyle(\\&quot;Arial\\&quot;,25) {\\n\\t fontWeight(\\n\\tFontWeight.bold())\\n\\t }) {\\n\\t transformation(Transformation {\\n\\t rotate(Rotate.byAngle(-25))\\n\\t adjust(Adjust.opacity(6)) })\\n\\t }) {\\n\\t position(Position() {\\n\\t tiled()\\n\\t })\\n\\t })\\n\\t signature()\\n\\t deliveryType(\\&quot;authenticated\\&quot;) \\n}.generate()&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;cookies.jpg\\&quot;)\\n\\t overlay(Overlay.source(\\n\\tSource.text(\\&quot;John Doe\\&quot;,TextStyle(\\&quot;Arial\\&quot;,25) {\\n\\t fontWeight(\\n\\tFontWeight.bold())\\n\\t }) {\\n\\t transformation(Transformation {\\n\\t rotate(Rotate.byAngle(-25))\\n\\t adjust(Adjust.opacity(6)) })\\n\\t }) {\\n\\t position(Position() {\\n\\t tiled()\\n\\t })\\n\\t })\\n\\t signature()\\n\\t deliveryType(\\&quot;authenticated\\&quot;) \\n}.generate()&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Kotlin&quot;,&quot;packageName&quot;:&quot;kotlin-url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;jquery&quot;,&quot;framework&quot;:&quot;jquery&quot;,&quot;language&quot;:&quot;jquery&quot;,&quot;rawCodeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;cookies.jpg\\&quot;, {type: \\&quot;authenticated\\&quot;, transformation: [ {angle: -25, overlay: new cloudinary.TextLayer().fontFamily(\\&quot;Arial\\&quot;).fontSize(25).fontWeight(\\&quot;bold\\&quot;).text(\\&quot;John%20Doe\\&quot;), opacity: 6}, {flags: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]} ]})&quot;,&quot;codeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;cookies.jpg\\&quot;, {type: \\&quot;authenticated\\&quot;, transformation: [\\n  {angle: -25, overlay: new cloudinary.TextLayer().fontFamily(\\&quot;Arial\\&quot;).fontSize(25).fontWeight(\\&quot;bold\\&quot;).text(\\&quot;John%20Doe\\&quot;), opacity: 6},\\n  {flags: [\\&quot;tiled\\&quot;, \\&quot;layer_apply\\&quot;]}\\n  ]})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;jQuery&quot;,&quot;packageName&quot;:&quot;cloudinary-jquery&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_native&quot;,&quot;framework&quot;:&quot;react_native&quot;,&quot;language&quot;:&quot;react_native&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;cookies.jpg\\&quot;)\\n  .overlay(\\n    source(\\n      text(\\n        \\&quot;John Doe\\&quot;,\\n        new TextStyle(\\&quot;Arial\\&quot;, 25).fontWeight(\\&quot;bold\\&quot;)\\n      ).transformation(\\n        new Transformation().rotate(byAngle(-25)).adjust(opacity(6))\\n      )\\n    ).position(new Position().tiled())\\n  )\\n  .setSignature(\\&quot;GOOo0vEj\\&quot;)\\n  .setDeliveryType(\\&quot;authenticated\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React Native&quot;,&quot;packageName&quot;:&quot;cloudinary-react-native&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;}]\"\n      parsed-url=\"{&quot;url&quot;:&quot;https:\\\/\\\/res.cloudinary.com\\\/demo\\\/image\\\/authenticated\\\/s--GOOo0vEj--\\\/a_-25,l_text:Arial_25_bold:John%20Doe,o_6\\\/fl_tiled.layer_apply\\\/cookies.jpg&quot;,&quot;cloud_name&quot;:&quot;demo&quot;,&quot;host&quot;:&quot;res.cloudinary.com&quot;,&quot;type&quot;:&quot;authenticated&quot;,&quot;resource_type&quot;:&quot;image&quot;,&quot;transformation&quot;:[{&quot;angle&quot;:&quot;-25&quot;,&quot;overlay&quot;:&quot;text:Arial_25_bold:John Doe&quot;,&quot;opacity&quot;:&quot;6&quot;},{&quot;flags&quot;:&quot;tiled.layer_apply&quot;}],&quot;transformation_string&quot;:&quot;a_-25,l_text:Arial_25_bold:John Doe,o_6\\\/fl_tiled.layer_apply&quot;,&quot;url_suffix&quot;:&quot;&quot;,&quot;version&quot;:&quot;&quot;,&quot;secure&quot;:true,&quot;public_id&quot;:&quot;cookies.jpg&quot;,&quot;extension&quot;:&quot;jpg&quot;,&quot;format&quot;:&quot;jpg&quot;,&quot;format_code&quot;:true,&quot;url_code&quot;:false,&quot;signature&quot;:&quot;GOOo0vEj&quot;,&quot;private_cdn&quot;:false,&quot;result_asset_type&quot;:&quot;image&quot;}\"\n      with-url=\"false\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget><\/p>\n<p>This very identifying watermark can help ensure that John will not break company policy and share <em>his<\/em> image with others.<\/p>\n<h2>One tough cookie<\/h2>\n<p>Preventing unauthenticated access to your resources can be an important concern for a variety of reasons. With cookies you can take your authentication workflow to a whole new level of customizable access to your resources, including the flexibility to tailor the access on an individual basis for every authenticated user. For more detailed information on authenticating resources and implementing cookie-based authentication, see the documentation on <a href=\"\/documentation\/control_access_to_media#authenticated_access_to_media_assets\">authenticated access to media assets<\/a>.<\/p>\n<p>The new authentication functionality is currently available for our <a href=\"\/pricing\">Enterprise<\/a> customers and requires a small setup on Cloudinary\u2019s side. <a href=\"https:\/\/support.cloudinary.com\/hc\/en-us\/requests\/new\">Contact us<\/a> to enable these features for your account.<\/p>\n<p>Cloudinary reduces the complexities of image transformation, storage, administration and delivery and provides developers with an easy-to-use, end-to-end, cloud-based solution. Cloudinary enables developers to focus on creating their apps and presenting the best images possible.\nIf you haven\u2019t tried Cloudinary yet, what are you waiting for? Visit our website to <a href=\"https:\/\/cloudinary.com\/users\/register\/free\">sign up for a free account<\/a>.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":21488,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[165,264],"class_list":["post-21487","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-image-transformation","tag-security"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How To Use Cookie-Based Authentication to Protect Visual Media<\/title>\n<meta name=\"description\" content=\"Provide more control over access to your images and video with Cloudinary&#039;s out-of-the-box support for uploading resources as authenticated.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Protecting images and videos via cookie-based authentication and Cloudinary\" \/>\n<meta property=\"og:description\" content=\"Provide more control over access to your images and video with Cloudinary&#039;s out-of-the-box support for uploading resources as authenticated.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-08T16:03:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-22T17:28:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"3800\" \/>\n\t<meta property=\"og:image:height\" content=\"2014\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Protecting images and videos via cookie-based authentication and Cloudinary\",\"datePublished\":\"2017-03-08T16:03:58+00:00\",\"dateModified\":\"2024-08-22T17:28:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication\"},\"wordCount\":9,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA\",\"keywords\":[\"Image Transformation\",\"Security\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2017\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication\",\"url\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication\",\"name\":\"How To Use Cookie-Based Authentication to Protect Visual Media\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA\",\"datePublished\":\"2017-03-08T16:03:58+00:00\",\"dateModified\":\"2024-08-22T17:28:26+00:00\",\"description\":\"Provide more control over access to your images and video with Cloudinary's out-of-the-box support for uploading resources as authenticated.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA\",\"width\":3800,\"height\":2014},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Protecting images and videos via cookie-based authentication and Cloudinary\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How To Use Cookie-Based Authentication to Protect Visual Media","description":"Provide more control over access to your images and video with Cloudinary's out-of-the-box support for uploading resources as authenticated.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication","og_locale":"en_US","og_type":"article","og_title":"Protecting images and videos via cookie-based authentication and Cloudinary","og_description":"Provide more control over access to your images and video with Cloudinary's out-of-the-box support for uploading resources as authenticated.","og_url":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication","og_site_name":"Cloudinary Blog","article_published_time":"2017-03-08T16:03:58+00:00","article_modified_time":"2024-08-22T17:28:26+00:00","og_image":[{"width":3800,"height":2014,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header-jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication"},"author":{"name":"","@id":""},"headline":"Protecting images and videos via cookie-based authentication and Cloudinary","datePublished":"2017-03-08T16:03:58+00:00","dateModified":"2024-08-22T17:28:26+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication"},"wordCount":9,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA","keywords":["Image Transformation","Security"],"inLanguage":"en-US","copyrightYear":"2017","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication","url":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication","name":"How To Use Cookie-Based Authentication to Protect Visual Media","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA","datePublished":"2017-03-08T16:03:58+00:00","dateModified":"2024-08-22T17:28:26+00:00","description":"Provide more control over access to your images and video with Cloudinary's out-of-the-box support for uploading resources as authenticated.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA","width":3800,"height":2014},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/protecting_images_and_videos_via_cookie_based_authentication#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Protecting images and videos via cookie-based authentication and Cloudinary"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649724450\/Web_Assets\/blog\/cookie_authentication_header\/cookie_authentication_header.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=21487"}],"version-history":[{"count":2,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21487\/revisions"}],"predecessor-version":[{"id":35446,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21487\/revisions\/35446"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/21488"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}