2013-04-19 3 views
2

다른 사이트에서 액세스 할 수있는 웹 서비스를 설정할 계획입니다. 웹 서비스가 보안되어야한다는 것과 웹 서비스에 액세스하는 각 사이트는 등록 된 도메인에 대해 인증된다는 아이디어가 있습니다.도메인 간 인증

  • 사이트 소유자는 내 웹 서비스
  • 다음의 웹 프런트 엔드에서 (foo.com 같은) 자신의 도메인을 등록합니다, HTTP 메소드 (GET, PUT, POST, DELETE 등) 일반적으로 자바 스크립트 HTTP 될 것 발급 사이트 요청
  • 웹 서비스에 액세스하는 사이트는 인증 할 필요가 없습니다. 웹 서비스는 그것이오고있는 도메인이 사전에 등록되었는지를 결정할 것입니다. 그렇다면 사이트의 도메인에 따라 요청을 처리 할 것입니다.

내가 지금 생각하고 문제는 이러한 종류의 시스템은 "규모"과 의지 "작업"

내가 모두 아파치 시로 봄 보안 일한 것하지만 요구 사항이 종류가 발생 적이 여부 .

+0

클라이언트 URL에 따라 인증 하시겠습니까? 예를 들어 'http : // foo.com'에서 사용자가 액세스 한 경우 인증 후 foo.com 사용자 권한을 얻습니다. 'http : // example.org'에서 사용자가 액세스하면 example.org 사용자가됩니다. 권한 등. 여기에 표시된 규모 문제는 무엇입니까? 또한 'http : // subdomain.foo.com'에서 사용자가 인증 후 어떤 사용자가 액세스해야합니까? 또한 foo.com? – Michael

+0

커스텀 토큰을 사용하는 것보다 더 나쁘지는 않을 것입니다. 아마도 모든 필요한 정보가 들어오는 요청에 이미 존재할 것이기 때문입니다. 그것이 작동 할 것이다 물결은 전체적인 다른 사정이다. 하나를 위해, 계획은 Javascript 클라이언트에 무겁게 설치되는 것처럼 보인다. 또한 스푸핑 된 연결 정보에 취약 할 가능성이 높습니다. – Perception

+0

@michael 바로 그게 내가 필요한 것입니다. 방금 저 단어를 사용하여 "규모"에 관해서는,이 아이디어는 실현 가능한 것으로 확장 될 것입니다. –

답변

0

시스템은 암호없이 사용자를 인증합니다. 즉, 사용자가 http://foo.com에서 액세스 할 경우 액세스를 사용하면 비밀번호를 입력하지 않고 인증 후 foo.com 사용자 권한을 얻게됩니다. 내가 PreAuthenticatedProcessingFilter 자신과 당신의 문제를 해결하기 위해 제안 할 : 그냥 요청 URL을 얻을 getPreAuthenticatedPrincipal의 구현에 http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#d0e6167 (하위 도메인없이) 도메인을 추출 요청 URL 정보 및 PreAuthenticatedAuthenticationProvider을 사용하여 인증합니다. AuthenticationUserDetailsServicePreAuthenticatedAuthenticationProvider 인 경우 데이터베이스에서 등록 된 도메인을로드해야합니다.

+0

요청이 Javascript Ajax 호출에서 올 것이라고 언급하지 않았습니다. 따라서 교차 도메인 –

+0

당신은 내가 여기서하려고하는 것을 알 수 있습니다 : http://stackoverflow.com/questions/16127369/get-the-origination-host-of-a-javascript-http-request –

0

나는 사용자 정의 필터를 사용하여 할 수있는 방법을 볼 생각 :

  1. 하면, PartnerSiteCheckerFilter 같은 것을 custom filter을 소유하고 추가합니다. 각 파트너 서버에 대한 IP 주소 목록이 있습니다. API 요청 만 확인합니다 (예 :/api/**). IP와 일치하지 않는 요청은 거부됩니다 (AccesDeniedException).
  2. 는 등록 과정에서 DB에 새 도메인을 저장하고 신뢰할 수있는 IP 주소

    InetAddress[] hosts = InetAddress.getAllByName("www.stackoverflow.com"); 
    for(InetAddress host : hosts) { 
        String ip = host.getHostAddress(); 
    } 
    // add ip to a list 
    
  3. 업데이트 PartnerSiteCheckerFilter의 내부 IP 목록

    의 목록을 가져옵니다.

  4. 응용 프로그램 시작시 DB에서 도메인 목록을 읽을 일부 구성 요소를 준비한 다음 각 서버에 대해 IP를 가져 와서이 목록을 PartnerSiteCheckerFilter에 삽입하십시오.
  5. 도메인 당 신뢰할 수있는 서버 목록은 런타임에 변경 될 수 있습니다. 업데이트 할 수있는 방법을 제공하는 것이 도움이 될 수 있습니다.

희망이 도움이됩니다. 질문이 있으시면 fre를보십시오.

+0

내가 직면 한 문제는 서블릿이나 서버 측 HTTP 요청에서 요청이 오지 않고 클라이언트 요청, 특히 자바 스크립트 HTTP 요청 일 것입니다. –