2013-04-23 3 views
5

REST를 사용하여 서비스를 제공하는 응용 프로그램을 개발하고 있습니다. 이러한 서비스는 브라우저 및 비 브라우저 클라이언트를 통해 액세스됩니다. 나는 다른 그룹에 의해 소유되고 관리되는이 소프트웨어의 많은 설치가있을 것으로 기대합니다. 한 시스템의 사용자가 다른 시스템의 서비스에 액세스 할 수있게하고 싶습니다. 동일한 ID 저장소를 공유하지 않습니다. 사용자가 인스턴스에 인증 한 다음 토큰을 사용하여 인스턴스 및 원격 인스턴스에 요청할 수 있다면 좋을 것입니다. 이것은 JSON Web Token (JWT)의 좋은 사용법처럼 보입니다. 각 시스템은 인증서에 의해 서명 된 서로의 토큰을 신뢰하도록 구성되어야합니다.JWT 연합 ID를 사용한 REST 인증/권한 부여

저는 이것이 JWT Bearer 토큰과 함께 OAuth를 사용하여 수행 할 수 있다고 읽었지만 필요한 것보다 많은 오버 헤드가있는 것으로 보입니다. 베어러 토큰을 사용하는 대신 액세스 토큰에 대한 베어러 토큰을 교환해야하는 이유는 무엇입니까? OAuth는 시스템이 사용자의 데이터에 액세스 할 수 있는지 여부를 제어하지 않기 때문에 OAuth가 적합한 지 여부에 의문을 제기합니다. 웹에서 많은 예제가 있지만 사용자가 시스템에 저장된 데이터에 액세스 할 수 있는지 여부입니다.

다음 문제는 이러한 JWT 토큰을 만드는 방법을 결정하는 것입니다. WS-Trust STS가 적합 할 것으로 보입니다. 나는 단순하고 단지 사용자를 인증하고 토큰을 반환하는 것을 보지 못했습니다. 잠재적으로 토큰 만료 및 토큰 유효성 검증을 지원하는 것도 유용 할 수 있습니다.

이전에는 WS-Security 및 SAML 어설 션과 함께 SOAP를 사용하여 이러한 유형의 기능을 사용할 수있었습니다. REST와 JWT 토큰을 사용하여 동일한 작업을 수행 할 수 있는지보고 싶습니다. 자신의 보안 프레임 워크를 롤업하는 것에 대해 조언하는 웹에는 많은 게시물이 있으므로, 나는 조금씩 주저하고 있습니다. 마이크로 소프트가 JWT 토큰을 사용하는 서비스 보호를 담당하는 핸들러를 추가 한 것을 보았 기 때문에이 접근법에서 어느 정도 가치가있는 것으로 보입니다.

누구나 표준 준수 및 방식으로 REST 서비스를위한 이러한 종류의 신분 제휴를 수행하는 방법에 대한 통찰력을 갖고 있습니까?

답변

4

예, 고객에게 권장하는 방법입니다. 실제로 JWT는 Windows Azure 모바일 서비스가 종단점을 보호하는 방법입니다. JWT는 (예를 들어 SAML 토큰과 비교하여) 비교적 간단하게 처리 할 수 ​​있지만 (서명이있는 것처럼) access_tokens에 비해 흥미로운 속성을 유지합니다.

는 WebApi 및 Google 제품 (MS 기술을 사용하는 경우)을 사용하여 수행하는 방법에 대한 예를 보여줍니다. 원칙은 일반적이지만 귀하가 STS를 사용하는지 여부와 상관없이 적용 할 수 있습니다.