2009-11-23 3 views
5

스프링 보안 2.0.5를 사용하여 작은 웹 앱에 OpenID 로그인을 추가하고 있습니다. 내가 로그인 한 OpenID 식별자를 기반으로 응용 프로그램 내에서 사용자를 식별 할 수 있기를 원합니다. 이는 Verisign을 공급자로 사용할 때 잘 작동합니다. 각 식별자는 http://jbloggs.pip.verisignlabs.com/과 같은 사용자 별 URI이며 내 사용자 데이터베이스에서 "Joe Bloggs"를 쉽게 찾을 수 있습니다.OpenID 앱이 동일한 사용자의 다른 클라이언트 컴퓨터에서 다른 Google OpenID를받는 이유는 무엇입니까?

사용자가 표준 Google OpenID 식별자 (www.google.com/accounts/o8/id)를 입력하면 인증 성공시 Google에서 보낸 식별자 (https://www.google.com/accounts/o8/id?id=AItOawnKrvwaGk9YU0q9STQGj9G7XIRlNmsjuiI 등)는 컴퓨터에 따라 다르며 시스템에 따라 은 동일합니다 사용자 따라서 사용자 데이터베이스에서 식별자를 찾아 해당 사용자를 식별 할 수 없게됩니다 (또는 적어도 비실용적입니다).

Google이 동일한 Google 사용자에게 항상 동일한 식별자를 보내도록하려면 어떻게해야합니까?

FWIW,이 응용 프로그램은 Tomcat 5.0.28이 내장 된 JBoss 3.2.7에서 실행됩니다.

+1

OpenID는 동의합니까? – jayarjo

+0

아니요, 나는 연합 신원의 편리함을 좋아합니다. 누가 50 개의 사용자 이름과 암호를 기억하고 싶습니까? 또는 더 나쁜 것은, 모두가 신뢰할 수있는 것은 아니지만 50 개의 웹 사이트에 동일한 사용자 이름과 암호를 위탁합니까? –

+0

나는 그 생각이 형편 없다고 말하지 않는다. 사실 그것은 아닙니다. 훌륭합니다. 모든 잠재적 문제가 있음에도. 나는 구현이 느슨하고 잘못되었다고 생각하며, 전혀 정의 된 표준이없는 것처럼 제공자마다 제공자마다 다르다. – jayarjo

답변

10

Google은 이라는 고유 ID이라는 기능을 사용합니다. Google은 사용자가 로그인하는 모든 RP (OpenID를 허용하는 웹 사이트)에 대해 새롭고 고유하며 상호 연관성이없는 식별자를 만듭니다. 이것은 옵션이 아닙니다. Google이 작동하는 유일한 방법입니다. Google이 RP 사이에서 식별하는 열쇠는 openid.realm 매개 변수이므로 동일한 경우 사용자에게 동일한 식별자가 부여됩니다. 그러나 영역을 변경하면 Google은 기존 사용자를위한 새로운 식별자 사이트를 보내므로 모든 사용자의 ID가 손실됩니다.

어떻게 할 수 있습니까? 두 가지 옵션 : 식별자는 공급자가 구글 때 사용자의 이메일 주소를 '요구'하는

  • 사용 AX을 변경하지 않도록

    1. 이 openid.realm를 일정하게 유지 한 다음 구글 식별자 사이의 상관 관계를 할 수 이메일 주소를 기반으로합니다. (비록 까다 롭지 만 : openid와 이메일 식별자를 둘러싼 많은 보안 파급 효과).
  • +2

    포인트 1 번으로 해결되었습니다. 서버에서 내 응용 프로그램을 테스트 할 때 http : // localhost/myapp URL을 사용했지만 두 번째 컴퓨터에서는 http : // server_name/my app을 사용했습니다. 내가 깨닫지 못했던 것은 Google이 이것을 두 개의 다른 영역으로보고 동일한 Google 사용자에 대해 서로 다른 ID를 반환한다는 것입니다. SSL을 사용하도록 응용 프로그램을 전환 할 때 SSL 인증서로 인해 서버 자체에서도 URL에 "server_name"을 사용해야했습니다. SSL 인증서 덕분에 SSL 덕분이라고 잘못 가정했습니다. 두 시스템에서 동일한 호스트 이름. 당신의 도움을 주셔서 감사합니다! –

    +1

    이제 엉망이 아니겠습니까? 기본적으로 하나의 표준 또는 구현 규칙이 전혀없는 것처럼 각 openid 공급자를 변조해야합니다. – jayarjo

    관련 문제