2010-02-03 5 views
0

BlazeDS RemoteObject를 사용하는 사람이 JBoss DatabaseLoginModule 로그인 정책을 통해 인증 된 사용자 역할을 검색 할 수 있습니까?BlazeDS 3.2.0 및 JBoss 5.1 DatabaseServerLoginModule

BlazeDS 3.2.0 및 JBoss 5.1을 사용하고 있습니다. 성공적으로 인증 할 수는 있지만 승인되지 않은 역할을 가진 사용자는 계속 로그인 할 수 있습니다.

<Realm className="org.jboss.web.tomcat.security.JaccAuthorizationRealm" certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping" allRolesMode="strict" /> 

같은 로그인 모듈은 다른 웹 응용 프로그램에서 사용하는 경우와는 잘 작동 : 아래 그림과 같이 나는 "엄격한"기본/jbossweb.sar/server.xml의 영역을 변경했습니다. 기본/conf의/로그인-config.xaml에서 내가 가진 :

<application-policy name="MyPolicy"> 
    <authentication> 
     <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required"> 
      <module-option name = "dsJndiName">java:/DefaultDS</module-option> 
      <module-option name = "principalsQuery">SELECT PASSWD FROM USERS WHERE USER_ID=?</module-option> 
      <module-option name = "rolesQuery">SELECT ROLE_ID, 'Role' FROM ROLES WHERE USER_ID=?</module-option> 
      <module-option name= "hashUserPassword">true</module-option> 
      <module-option name= "hashAlgorithm">SHA-256</module-option> 
      <module-option name= "hashEncoding">base64</module-option> 
     </login-module> 
    </authentication> 
</application-policy> 

기타 사항 : - WEB-INF/제이 보스 - web.xml에

<jboss-web> 
    <security-domain flushOnSessionInvalidation="false">java:/jaas/MyPolicy</security-domain> 
</jboss-web> 

WEB-INF/context.xml에

<Context> 
    <Valve className="flex.messaging.security.TomcatValve" /> 
</Context> 

WEB-INF/플렉스/서비스-config.xml에

<security> 
    <login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss"> 
    <per-client-authentication>false</per-client-authentication> 
    </login-command> 
    <security-constraint id="custom-admin-access"> 
    <auth-method>Custom</auth-method> 
    <roles> 
     <role>ADMIN</role> 
    </roles> 
    </security-constraint> 
</security> 

WEB-INF /flex/remoting-config.xml

<destination id="MyRemoteService"> 
    <properties> 
     <source>test.blazeds.MyRemoteService</source> 
     <scope>session</scope> 
    </properties> 
    <security> 
     <security-constraint ref="custom-admin-access" /> 
    </security> 
</destination> 

은 내가 내 자신의 JDBC 기반 톰캣 영역을 구현하기 위해 시도 할 수 알고하지만 보스는 또한 LDAP와 같은 다른 로그인-모듈을 제공하기 때문에 피하기 위해 같은 것 같은 그 뭔가, 나는 앞으로 사용하게 될지도 모릅니다.

감사합니다, B.

답변

0

내가 나서서와 블레이즈 DS 소스 코드를 다운로드하고 디버깅 후 나는 그것이 로그인 행동에 왔을 때 그냥 나와 내 기대를되었을 수도 있음을 깨달았다. 여전히 BladeDS 문서에서 명확한 방식으로 설명하지 않기 때문에 다소 혼란 스럽습니다. 누군가가 실제로 프로세스에서 나를 명확히 할 수 있습니다.

내 구성은 매우 간단합니다. 하나의 대상은 RemoteObejct 사용과 허용되는 역할에 대한 하나의 보안 제한입니다. 이 시나리오에서는 사용자에게 예상되는 역할이 포함되지 않은 경우 ChannelSet.login이 실패 할 것으로 예상했습니다. 대신 로그인은 의 성공을 거두었습니다. 현재 디자인에서는 사용자가 계속 진행할 수 있습니다.

디버깅 후 TomcatLoginCommand.isUserInRole 메서드 은 RemoteObject 메서드가 호출 된 후에 만 ​​호출되지만 결코 ChangeSet.login 명령 인 중에 호출되지 않습니다. 이를 확인하기 위해 대상의 일부 메소드에 보안 제한 조건을 연결했습니다 (설명서에 표시된대로 - 참조). 예상대로, 주어진 역할이없는 사용자로 로그인 할 때 RemoteObject 메소드 이 호출되지 않았지만 역할이 존재하면 모두 좋았습니다.

<destination ...> 
... 
    <include-methods> 
     <method name="fooMethod"/> 
     <method name="barMethod" security-constraint="custom-admin-access"/> 
    </include-methods> 
... 
</destination> 

이 질문에 대한 답변은 다음과 같습니다. 의도 한 동작입니까? 인증 된 사용자가 허용 된 역할 집합 에 참여하지 않으면 ChangeSet.login을 즉시 실패해야합니까?

관련 문제