Accessing private images with an <img> tag in REST using Spring security & JWT

Current scenario

The Spring project has a REST API protected by Spring Security and JWT. These APIs give a JSON response. A UsernamePasswordAuthenticationFilteris implemented to validate the JWT sent in the header Authorization. Both the authenticated and unauthenticated APIs work as intended.

Demand

Now I need to send the image in the HTTP response for the registered user.

Solution1

Sent by a byte[], representing the image as the value for the image key along with other information. But for a full JSON response, this may take some time if the image is large.

Solution2

I sent the link as a value to the "image" along with other information. The client can designate <img src=the_link>which should display a large image in a separate request. Then create a query with @RequestMappingthat matches the link that it creates byte[].

My problem

I prefer the solution2. But it will throw an exception UNAUTHORIZEDbecause there is no valid token Authorization. In addition, this API must be authenticated.

After some searching, find out this one that matches my requirement. The accepted answer says:

The OAuth Token Token Specification supports sending a token as a request parameter.

Is that what I have to do?

  • In my Spring filter, get JWT from the header Authorization, if it is empty, get it fromrequest.getParameter()
  • JSON API, "image":"http://ip/getImage?token=dbscsbCXV"
  • API @GetMapping("getImage") byte[] getImage()

? , .

+6
1

, , , :

  • HTTPS , JWT ( ).
  • , URL- ,

(, 3 UUID ) Image, REST, :

https://ip/images/824b6854-edcc-11e6-bc64-92361f0026713567fef0-549a-4cdb-9264-5e15166dfd6f/the-file-name.pdf

, Spring "" .

:

  • ( ). CDN, .
  • URL , JWT auth

, , , , , . Facebook (https://www.quora.com/Are-Facebook-pictures-really-private-and-are-they-hosted-on-Facebook-servers, https://en.wikipedia.org/wiki/Capability-based_security)

+5

Source: https://habr.com/ru/post/1014788/


All Articles