토큰 기반 인증을 사용하는 경우 이미지를 로드하는 방법
이 도메인 상에 .client-domain.example
.server-domain.example
API를 사용하다클라이언트측 애플리케이션은 서버측 애플리케이션에 AJAX 요구를 송신합니다.토큰 기반 인증을 사용하기 때문에 클라이언트 측 응용 프로그램은 각 AJAX 요청과 함께 헤더에 토큰을 전송합니다.예를 들어 다음과 같습니다.{some token}을(를) 사용합니다.AJAX 요청 시 데이터를 가져오거나 게시해야 할 때 정상적으로 작동합니다.
API를 사용하다예를 들어 이미지.파일은 비공개이며 인증된 사용자만 가져올 수 있습니다. 이 는 클라이언트 .<img>
가 안 돼요.<img src="http://server-domain.example/path/to/image">
이 경우 브라우저는 Authorization 헤더를 서버 측에 송신하지 않기 때문입니다.
채택된 솔루션은 무엇입니까?클라이언트 애플리케이션이 서버측 API에서 이미지를 로드하는 방법은 무엇입니까?
해결 방법에는 세 가지가 있습니다.가장 좋은 방법은 서명된 URL을 사용하는 것입니다.
1. 서명된 URL(보안되지 않을 수 있음)
첫 번째 방법에서는 리소스를 로드할 수 있는지 여부를 나타내는 시그니처 해시 파라미터를 사용하여 인증(익명 액세스) 없이 루트를 작성합니다.
<img src="http://server-domain.example/path/to/image?guid=f6fc84c9f21c24907d6bee6eec38cabab5fa9a7be8c4a7827fe9e56f2">
하면, 「의 요구」를 가 있습니다.guid
안기한이 안 기한이 안 차면 기한이 안 차서 기한이 안 기한이 안 차서 기한이 안 차면 기한이 안 차서 기한이 안 차면 이 안 차서 기한이 안 차면 기한이 안 차서 기한이 안 차서 기한이 안 차면 이 안 차서 기한이 안 차면 기한이 안 차서 기한이 안 차서 기한이 안 차면 기한이 차면 기한이 안 차서 기한이 차서 기한이 차면 기한이 안 차서 기한이 안 차면 기한이 안 차면 기한이guid
유효한 서명이 있습니다.
이 접근방식은 Dropbox, S3, CDN 공급자 등의 여러 파일/문서 서버에서 사용됩니다.
일부 회사의 기술을 참조하십시오.
https://client.cdn77.example/support/knowledgebase/cdn-resource/how-do-i-set-up-signed-urls
보안:
guid
UUID를 사용합니다.이는 아무런 보호도 제공하지 않기 때문입니다.guid
은 사용할 수 는 사용할 수 ).WT 토큰)은 사용자가 링크를 공유할 수 있고 사용자가 자신의 토큰을 공유할 수 있기 때문입니다((2) 참조).
, 「」는 다음과 같습니다.guid
있어야 " file접근/filename/...)보다 많은 권한을 할 수 .
2 JWT를 사용한 쿼리 문자열(대부분 보안 위반)
두 번째 방법은 이미지 URL을 사용하여 쿼리 스트링을 통해 토큰을 전달하는 것입니다.
- 이 방법은 URL을 명확하게 공개하고 많은 서버가 액세스한 URL의 공개 로그를 쓰거나 공개하기 때문에 권장되지 않습니다.나쁜 점은 JWT가 정상적으로 노출되면 사용자가 많은 기능을 영상 로드에서 제어할 수 있다는 것입니다.
<img src="http://server-domain.example/path/to/image?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c">
서버가 요청을 수신하면 쿼리 문자열과 콘텐츠에 대한 응답을 통해 토큰을 검증해야 합니다.
보안주의: (1)보다 나쁨 - 인증정보(JWT 인증)가 URL에 공개되어 서버에 의해 캐시/로그되거나 중간에 있는 임의의 서버에 의해 액세스되거나 사용자가 단순히 "이미지 링크"를 동료와 공유할 수 있기 때문입니다.
그러나 JWT가 액세스 토큰이 아닌 JWT 형식으로 특정 파일에 액세스하기 위해 특별히 생성된 일회성 토큰인 경우 JWT는 (1)과 동일한 수준의 보안을 제공합니다.
3. 쿠키
세 번째 방법에서는 인증된 쿠키를 생성하여 이미지 액세스를 검증합니다.
- 이 방식은 API 패턴(일반적으로 webapi/token 기반 인증)을 벗어나므로 권장되지 않습니다.
서버가 요청을 수신하면 validate cookie가 유효한지 확인해야 합니다.
보안 주의: 쿠키 및 XSS 및 CSRF에 대한 보안을 제공할 수 있는 경우, 고객님께 드리는 문자뿐만 아니라 솔루션이 됩니다.단, 쿠키가 브라우저에 의해 요청될 때마다 자동으로 전송됩니다.생각할 수 있는 위협 및 솔루션에 대한 자세한 내용은 다음과 같습니다.JWT를 브라우저 어디에 저장합니까? CSRF로부터 보호하는 방법
나의 Tenerio의1)에 이미지와 Tenerio)을 이었습니다.path/to/image?token=xxxx
일반적으로는, 이것은, 다음과 같이 간단하게 실시할 수 있습니다.encrypt($your_object)
★★★★★★★★★★★★★★★★★」decrypt($token)
(https://laravel.com/docs/5.7/encryption),에서 추출한 토큰을 사용하여 사용자가 해당 파일에 액세스할 수 있는지 확인했습니다.그러나 이 문제를 해결할 수 있는 다른 도서관이 많이 있을 것입니다.
보안에 대한 우려는 없는지 궁금하지만, JWT는 일반 텍스트로 노출되지 않으며 암호화는 악의적인 행위자가 접근해서는 안 되는 비밀 키에 의존하기 때문에 상당히 안전해야 할 것 같습니다.저의 유일한 불만은 토큰이 너무 길어서 표시 가능한 URL을 만들 수 없다는 것입니다.
언급URL : https://stackoverflow.com/questions/34096744/how-should-i-load-images-if-i-use-token-based-authentication
'programing' 카테고리의 다른 글
wordpress에서 wp_mail() 함수를 사용하는 방법 (0) | 2023.04.04 |
---|---|
typescript 인터페이스에는 두 가지 속성 중 하나가 필요합니다. (0) | 2023.04.04 |
새로 고칠 때 (AJAX) URL 필터 매개 변수와 함께 AJAX 페이지화 작업 (0) | 2023.04.04 |
Angular ng-container에 대한 AngularJS 등가물 (0) | 2023.04.04 |
잭슨 역직렬화기 - null 컬렉션을 비우도록 변경합니다. (0) | 2023.04.04 |