2016-07-27 3 views
4

저는 react와 relay를 사용하는 응용 프로그램에서 작업을 해왔습니다. 이제 인증 구현에 박차를 가하고 있습니다.Relay & GraphQL의 인증

GraphQL 해결 함수에서 사용할 수있는 컨텍스트를 통해 각 graphql 요청에 값을 전달할 수 있다는 것을 알고 있습니다.

나는 무엇을 어떻게 전달할 지 혼란 스럽다.

JSON 웹 토큰, 여권 등을 사용하는 것이 더 좋습니까? 그리고 사용자 식별자를 어떻게 전달해야합니까?

기본적으로 내가 묻는 바에는 무엇이 가장 적합한 릴레이인가? jwt, 여권, 다른 것? 릴레이를 연결하는 방법. 감사!

+0

Auth0에 대한 우리의 경험은 매우 좋았습니다. 셋업은 다소 사소한 것입니다. –

답변

3

나는 당신의 최선의 방법이 시동기 장비의 일부를 연구하는 것이라고 생각한다. 불행하게도이 키트 중 거의 대부분이 완전한 JWT 구현을 제공하지 못합니다. 대다수는 절반 만 완료 한 것 같습니다.

체크 아웃 :

  • Relay Authentication. 귀하의 마일리지가 다를 수 있습니다 - 그것은 전체 개념을 커버하지만 몇 가지 버그가 있습니다.
  • Universal Relay Boilerplate. 그 중 하나는 꽤 놀랍고 완벽하지만 짐승이며 iOS/Android 앱 제작이 포함되어 있기 때문에 작업하기에 다소 압도적입니다.
  • Relay Starter Kit. 글을 쓰는 시점에는 FB auth 설정 (작동하는 정규 로그인 양식이 없음) 만 있으면 JWT 쿠키가 설정됩니다. 나는 모든 로그인 경로를 GraphQL로 마이그레이션하는 것이 현재로서는 로드맵에 있다고 생각한다.

귀하의 jwt/여권 질문까지. 그것들은 상호 배타적이지 않습니다. Passport는 jwt auth를 처리 할 수 ​​있지만 개인적으로는 사용하지 않고 jwt 라이브러리로 직접 작업합니다. 릴레이 스타터 키트 파일 server에서 확인할 수 있습니다.

JWT 토큰은 일반적으로 헤더 주위에 전달하지만 Http 만 쿠키 이들 토큰을 저장하는쪽으로 시프트되고있다 (이 article 참조). 이 방법의 장점은 릴레이를 사용하여 토큰을 전달할 필요가 없다는 것입니다.

+0

jwt와 여권이 상호 배타적이지 않다는 것은 무엇을 의미합니까? 이제 사용자를 인증하는 두 가지 다른 방법이 있습니까? 왜 둘 다 사용합니까? –

+1

Passport는 로컬 인증 (표준 사용자 이름/패스 및 아마도 Passport에 대해 언급 한 내용), 페이스 북, jwt 등을 처리하는 플러그인이있는 일반 인증 도구입니다. 그것은 특별한 방법을 규정하지 않습니다. 특히 FB/twitter 인증의보다 복잡한 시나리오를 처리 할 때 편리합니다. 그러나 jwt를 포함한 모든 인증 방법은 원하는 경우 여권없이 처리 할 수 ​​있습니다. – cyberwombat

+0

어떤 이유로 나는 패스포트를 세션 기반 인증과 섞어서 jwt와 같은 토큰 기반 인증과 관련이 있는지 이해하지 못했습니다. 감사합니다! –

0

저는 cyberwombats 답변의 첫 번째 예제를 작성했으며 현재 새 universal relay starter kit을 개발 중입니다. AWS Cognito를 통한 인증이 포함되어 있으며 not fully working yet이지만 Cognito를 통한 FB 로그인이 있습니다. 그것은 Cognito가 발행 한 JWT 토큰을 사용합니다.

Cognito 또는 Auth0 또는 유사한 서비스를 사용하는 대신 인증 워크 플로를 직접 구현해야하는 경우 Passport가 대안이 될 수도 있습니다. 로그인 등의 인증 엔드 포인트를 표시하는 (별도의) 인증 서버를 구현할 수 있습니다.이 서버는 인증을 위해 GraphQL 서버에서 사용할 수있는 쿠키에 JWT를 설정할 수 있습니다.

스타터 키트는 아직 개발 중입니다 (예 : 새로 고침 토큰이 아직 사용되지 않음). 그러나 이미 사용할 수 있습니다.