2017-12-19 32 views
1

나는 기본 톰캣 인증을 사용 AWS에 배포 된 Java 웹 응용 프로그램을 가지고있다. 이 모든 것은 컨테이너에 의해 처리됩니다. 나는 응용 프로그램이 어떤 인증도 처리하지 않지만 컨테이너는 Google 또는 GSuite 계정으로 로그인하는 Google OAuth2와 동일한 작업을 수행하려고 노력했습니다. 이것이 가능한가?Google OAuth2에서 Tomcat 8.0 컨테이너 수준 인증을 구현하는 방법은 무엇입니까?</p> <pre><code><login-config> <auth-method>BASIC</auth-method> </login-config> </code></pre> <p>응용 프로그램 자체가 어떤 인증을 수행하지 않습니다 -

OpenID Connect Authenticator for Tomcat 유망 해 보였지만 로그인 할 때 계속 로그인 오류 페이지로 리디렉션되었습니다.

나는에이를 구현하는 동안 다음 단계에 따라 내 localhost -

  1. I 다운로드 및 /tomcat-8/lib/ 자신의 jar file을 두었다.
  2. 클라이언트 ID를 Authorized JavaScript origins으로 작성하여 https://localhost:8443Authorized redirect URIshttps://localhost:8443/myapp/j_security_check으로 작성했습니다.
  3. localhosthttpsport 8443에 설정하려면 hostBaseURI이 필요합니다. 내 응용 프로그램의 web.xml, I 설정에서
  4. -

    <security-constraint> <web-resource-collection> <web-resource-name>All</web-resource-name> <url-pattern>*.html</url-pattern> <url-pattern>/myapp/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>*</role-name> </auth-constraint> </security-constraint>

    <login-config> <auth-method>FORM</auth-method> <realm-name>authTestWeb</realm-name> <form-login-config> <form-login-page>/WEB-INF/public/login.html</form-login-page> <form-error-page>/WEB-INF/public/login-error.html</form-error-page> </form-login-config> </login-config>

  5. context.xml에서, 내가 설정 <Valve className="org.bsworks.catalina.authenticator.oidc.OpenIDConnectAuthenticator" discoveryDocumentURL="https://accounts.google.com/.well-known/openid-configuration" clientId="xxxx" clientSecret="xxxx"/>Valve 속성을.

  6. Google Sign-In scriptlogin.html에 두었습니다.

https://localhost:8443/myapp에 액세스하면 Google 사용자 이름과 비밀번호를 묻는 메시지가 나타납니다. 그래도 로그인하면 Check Cookie 메시지가 잠시 표시되고 login-error.html으로 리디렉션됩니다.

내가 뭘 잘못하고 있니?

또한 Philip Green II's module for Google OAuth 2을 사용하려고 생각했지만 Tomcat 8.5 이상에서만 사용할 수있는 것으로 보입니다. 아쉽게도 AWS Elastic Beanstalk은 Tomcat 8.0 만 최신 버전으로 사용합니다.

Google OAuth2를 사용하여 Tomcat 8.0 컨테이너 수준 인증을 얻으려면 어떻게해야합니까?

답변

1

, 구글 OAuth2를가 인증을 수행하는 동안, 권한 부여는 아직도 내가 역할 myrole을 만들고 해당에 대한 사용자, 사용자 이름과 암호가 모두 같은입니다 를 추가했다하는 톰캣에 의해 처리되고 있음을 밝혀 즉사용자 이름과 암호를 모두이 될 것입니다 [email protected] -

<user username="[email protected]" password="[email protected]" roles="myrole"/>

자신의 문서에서 발췌 - 영역 암호이라고, 같은 방식으로 구성해야 "오픈 ID 연결 인증의 목적 항상 사용자 이름과 동일합니다 (여전히 Tomcat API의 제한 사항으로 인해 비밀번호가 필요합니다). "

<security-constraint> 
    ... 
    <auth-constraint> 
     <role-name>myrole</role-name> 
    </auth-constraint> 
</security-constraint> 
<security-role> 
    <role-name>myrole</role-name> 
</security-role> 
-

또한, 나는 <auth-constraint>의 역할 myrole를 지정하고 <security-role>했다