일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 빅데이터
- I'm Sorry
- 컴퓨터공학
- 소프트웨어
- 사이버보안
- 딥러닝
- 자바스크립트
- 데이터베이스
- 머신러닝
- 네트워크보안
- 자료구조
- 네트워크
- Yes
- 웹개발
- 소프트웨어공학
- 컴퓨터비전
- 알고리즘
- 버전관리
- 데이터과학
- 데이터구조
- 2
- 보안
- 프로그래밍
- 인공지능
- 파이썬
- 컴퓨터과학
- 데이터분석
- 코딩
- 클라우드컴퓨팅
- 프로그래밍언어
- Today
- Total
스택큐힙리스트
싱글 사인온 플로우는 교차 도메인 인증을 위해 JWT를 사용합니다. 본문
사용자가 example2.com로 이동하고 이미 가지고있는 JWT 토큰을 사용하여 인증을 받으려는 경우, 플로우는 어떻게 되어야 할까요? 로컬 스토리지
는 교차 도메인 액세스를 허용하지 않는 것 같아서 이 시점에서 브라우저는 example2.com로의 요청을하기 위해 JWT 토큰을 읽을 수 없습니다!
해야 할 일:
- 사용자는 인증 서버로 다시 리디렉션됩니까? 사용자가 example1.com을 인증했을 때, 인증 서버는 사용자에게 쿠키를 설정할 수 있으므로 example2.com에 대한 이 새로운 인증 요청은 해당 쿠키를 사용하여 사용자가 이미 인증되었음을 확인하고 즉시 그를 example2.com으로 리디렉션 할 수 있습니까?
- 또는 브라우저가 example2.com으로 가기 전에 인증 서버에 다시 가지 않고도 JWT 토큰에 액세스 할 수 있습니까? 크로스 스토리지 솔루션이 있는 것 같습니다만, 이들은 널리 사용되는 것인가요? 이것들이 교차 도메인 SSO 환경에 대한 제안된 솔루션인가요?
우리는 무언가 화려한 것은 원하지 않습니다. 우리는 주로 사용되는 솔루션에 만족 할 것입니다!
답변 1
인증 서비스에서 자격 증명을 다시 요청하지 않게하려면 세션 쿠키 (액세스 토큰이 아님)을 사용하는 것이 일반적이지만, 브라우저 localStorage / 쿠키 및 sso.example.com이라는 중간 도메인을 가리키는 iframe을 사용하여 도메인 간 데이터 공유 기술이 있습니다.
사용자를 example1.com에서 인증하기 위해 인증 서버인 sso.example.com으로 리디렉션하고 인증 후 JWT를 발급한 다음 이 도메인의 localStorage에 저장합니다. 그 후에 사용자를 원본 도메인인 example1.com으로 리디렉션합니다.
example2.com에서 sso.example.com을 가리키는 iframe을 생성합니다. sso.example.com의 iframe은 JWT 토큰을 읽고 부모 페이지에 메시지를 보냅니다.
부모 페이지는 메시지를 수신하고 첨부된 토큰을 가져와 SSO 플로우를 계속합니다.
동일 출처 정책에는 문제가 없습니다. 왜냐하면 sso.example.com
은 localStorage에 액세스 할 수 있으며 원본 및 대상 도메인이 서로 인식한다면 iframe과 부모 페이지 간의 통신이 허용됩니다 (자세한 내용은 http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage에서 확인하십시오).
개발을 간소화하기 위해 최근에 JWT와 함께 크로스 도메인 SSO를 https://github.com/Aralink/ssojwt에서 공개했습니다
이 방법은 SSO 흐름과 완벽하게 호환됩니다. 도메인이 연합된 경우 리디렉션 없이 인증 토큰을 공유하고 불필요한 로그인을 피하는 방법일 뿐입니다.
답변 2
단일 서명 온(flows)은 사용자가 다양한 도메인들 간에 인증된 상태로 한 번의 로그인으로 여러 서비스에 접근할 수 있는 기술입니다. 이 흐름을 구현하기 위해 JSON 웹 토큰(JWT)을 사용할 수 있습니다. JWT는 사용자가 서핑하는 도메인에서 발급되고, 여러 도메인들 간의 통신에서 사용됩니다.첫 번째 단계는 사용자가 로그인 페이지에 접속하는 것입니다. 사용자는 자격 증명을 제공하여 인증을 받습니다. 이러한 자격 증명은 일반적으로 아이디와 비밀번호로 구성되지만, 소셜 미디어 계정과 같은 다른 인증 방식도 가능합니다.
로그인 후 사용자는 클라이언트 측에 JWT를 발급합니다. 이 JWT는 사용자가 인증되었음을 증명하는 토큰입니다. 토큰은 주로 서명된 페이로드 정보를 포함하며, 사용자의 고유한 ID 및 기타 인증 관련 데이터를 포함합니다.
다음으로, 사용자가 다른 도메인으로 이동하거나 다른 도메인의 서비스를 요청할 때마다 이 JWT를 사용하여 인증합니다. 클라이언트 측은 JWT를 요청 헤더에 첨부하고 서버 측은 헤더에서 JWT를 추출하여 디코딩합니다. 이러한 절차를 통해 서버는 사용자가 인증되었는지 확인할 수 있습니다.
JWT를 사용하는 주요 장점 중 하나는 서비스 간의 인증 작업을 반복하지 않아도 된다는 것입니다. 한 번 로그인하면 사용자는 여러 도메인들의 서비스를 스위치하면서 계속 인증 받을 필요 없이 액세스할 수 있습니다. 이는 사용자 편의성을 크게 향상시킵니다.
또한 JWT는 서명되어 있기 때문에 변조 또는 위조를 방지할 수 있습니다. 서버는 비밀 키를 사용하여 토큰을 서명하고 클라이언트는 이키를 사용하여 토큰의 유효성을 검증합니다. 이런 방법으로 JWT는 안전한 인증을 보장합니다.
단일 서명 온(flows)을 구현하는 JWT는 다양한 도메인들 간에 효율적이고 안전한 인증을 제공하는 강력한 도구입니다. 이 기술은 사용자 편의성을 향상시키고 보안적인 측면에서도 매우 유용합니다. 따라서 서비스 제공자들은 SEO 방식으로 이 기술을 구현하여 사용자들에게 더 나은 경험을 제공할 수 있습니다.