2011-03-16 2 views
0

우리는 system에서 Java 애플릿 클라이언트 (벙어리 HTML 페이지에 포함)와 Java 서버를 사용하여 소켓을 통해 (SSL을 통해) 통신하는 아키텍처를 사용하고 있습니다.Java 애플릿과 함께 싱글 사인온 (OpenID, OAuth 등)?

사용자는 사용자 이름과 암호 (잘하면 공유되지 않음)를 사용하여 시스템에 로그인해야합니다. 그러면 암호가 데이터베이스의 해시 형식으로 저장됩니다.

최근에 Jeff의 Your Internet Driver's License을 읽은 사용자는 OpenID와 같은 대체 메커니즘으로 로그인 할 수 있으므로 사용자 이름과 비밀번호를 기억할 필요가 없지만 로그인 한 사람과 동일한 사용자임을 계속 알고 있습니다. 하루 전에 다른 컴퓨터에서.

내가 이해하는 한, OpenID는 브라우저 리다이렉션과 서버 측 암호화를 조합하여 작동합니다. 이것은 우리 애플릿 (또는 HTTP가 아닌 서버와 결합 된 애플릿)과 결합하는 것이 불가능한 것은 아니지만 실제로는 여기에 로그인해야하는 것처럼 보입니다.

OAuth는 사용자가 내 애플릿에 입력 할 유사한 메커니즘 또는 사용자에게 제공되는 토큰을 사용합니다. 애플릿은 반복적 인 로그인을 허용하기 위해이 토큰을 클라이언트 (JNLP PersistenceService 또는 이와 유사한 것)에 저장해야하지만 모든 컴퓨터가 새 토큰을 얻고 여러 사용자가 컴퓨터 (계정)를 쉽게 공유 할 수 없도록한다는 것을 의미합니다. 별로 로그인을 단순화하지 않습니다.

여기에 싱글 사인온 시스템을 사용하는 데 사용할 수있는 다른 방법이 있습니까, 아니면 적어도 애플릿에 자격 증명을 전송하는 HTTP 서버 측 코드를 얻지 않고 단순히 불가능할 수 있습니까?

답변

0

OpenId libraries 중 하나를 사용하여 OpenId를 사용하여 애플릿 외부의 사용자로 로그인 할 수 있습니다. 서버 측 프로세스와 사용자의 OpenId 공급자 페이지로의 리디렉션을 포함하여 정상적인 흐름입니다. 그런 다음 애플릿에 사용자 ID를 전달합니다

<object codetype="application/java" ...> 
    <param name="user" value="myOpenId"> 
</object> 

는 그런 다음 this.getParameter("user")를 사용하여 사용자를 인증 할 수 있습니다.

+0

사실 나는 모든 OpenID를 가진 사람이라면 누구든지 HTML 코드를 로컬로 수정할 필요가 있습니다. 나는 이것이 안전한 구현이라고 생각하지 않는다. 이것은 OpenID 인증이 성공했다는 애플릿 (및 그 서버)을 확인하는 웹 서버의 서명이 적어도 필요합니다. –

+0

맞습니다. 매개 변수를 인코딩하거나 서버가 생성하고 사용자를 가리키는 키를 전달할 수 있습니다. – olivierlemasle