2017-12-03 12 views
2

JASPIC에서 일한 지 한시간이 지났습니다. 인증에 JASPIC을 사용할 때 web.xml은 인증 측면에서 여전히 관련이 있습니까?

나는이처럼 보이는 web.xml 있습니다

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
          http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <security-constraint> 
    <web-resource-collection> 
     <web-resource-name>service-broker-related-resources</web-resource-name> 
     <url-pattern>/v2/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>emcc</role-name> 
    </auth-constraint> 
    </security-constraint> 

    <login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>Frob Service Broker</realm-name> 
    </login-config> 

    <security-role> 
    <role-name>emcc</role-name> 
    </security-role> 

</web-app> 

는 전 서버 인증 모듈 (SAM)과 설정 및 설치되어 있습니다. 그것은이처럼 내 glassfish-web.xml에서 언급 한 :

<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app httpservlet-security-provider="emccSAM"> 

내 SAM 잘 작동합니다.

사실, 너무 잘 작동합니다! <url-pattern>으로 식별되는 요청뿐만 아니라 모든 요청을 가로 채고 있습니다. /v2/*입니다. 그것은 처음에 나를 놀라게했다.

그러나 이것에 대해 열심히 생각할 때, 이것이 의미가 있다고 생각합니다. SAM은 이제 컨테이너가 아닌 인증을 담당합니다.

이제는 web.xml이 본질적으로 관련이 없습니까?

그런 다음 내용이 인증 이후에 수행해야 할 작업, 즉 사용자가 SAM을 통해 성공적으로 인증 한 경우 내용이 다르므로 emcc 역할이 있는지 확인하십시오. . 그녀가하지 않으면 아마도 요청이 /v2/으로 시작되고, 그 후에 우리는 그녀를 부팅시킵니다. 그녀가하지 않으면 요청이 다른 것으로 시작한다고 가정하면

내 SAM이 들어오는 요청의 유효성을 효과적으로 결정해야합니다. 자격이 필요합니까?<security-constraint>에 설명 된대로 누군가가 인증이 필요한 URI에 액세스하려고 시도 할 때만 SAM이 "정상적으로"트리거 될 것으로 예상됩니다.

JAX-RS Application 클래스에 @ApplicationPath("/v2")이라는 주석을 달았을 때 기본적으로 설치된 서블릿 만 작동한다는 점에 유의할 가치가 있습니다.

답변

1

SAM은 실제로 인증을 완전히 책임지고 있습니다. 선언적 구성을 존중할 수 있지만 필수는 아닙니다. 심지어 서블릿 요청을 자체적으로 승인 할 수도 있습니다 (그렇게하더라도 계약 범위를 벗어날 수 있습니다). JASPIC 스펙 § 3.8.3으로 당

이를 validateRequest가 해당 접속 요구 사항을 만족하는 모든 요청에 ​​"(이 경우도 이에 해당 단일 캡슐화 SAM) 구성된 ServerAuthContext을 호출 할 것이 의무화 ".

SAM에가 서블릿 엔드 포인트가, descriptor- 또는 주석이 많다는, "보호"으로 간주해야하는지 여부를 알고하고자하는 경우

,이 메시지에서의 request MessagePolicy 초기화 시간에 그것을 전달 인자, 또는 프로브에 isMandatory를 호출 할 수 "javax.security.auth.message.MessagePolicy.isMandatory" 키가 있고 Boolean.valueOf(value).booleanValue() == true (스펙 § 3.8.1.1)과 같은 매핑 된 값의 존재에 대한 인수 맵은 입니다.

마지막으로 중요한 것은 인증의 관점에서 관련없는 선언적 보안 제약 조건입니까?우선, 다양한 스펙이 선언되지 않은 역할을 할당하는 SAM으로 괜찮은지 확실하지 않습니다. 그건 제쳐두고, 나는 이것을 시도한 적이 없기 때문에,이 시점에서 막연한 대답을 추측하고 제공 할 수 있습니다. 필자가 받아들이는 것은 인증 제공자의 경우와 거의 동일하다는 것이다. 본질적으로 공급자를 AS에서 구성하는 책임을지고 있으므로 대체적으로 구성 인터페이스를 제공해야합니다. 일부 JACC 제공 업체가 승인을 관리한다고합니다. 이것이 디폴트 인 AS 제공의 경우, 선언적 보안 제약이없는 경우 호출자가 /v2/* 리소스 모음에 액세스하기 위해 "emcc" 역할에 있어야한다는 사실을 인정하지 않습니다. 즉, 동등한 WebRoleRefPermissionPrincipal에 매핑됩니다. 따라서 Policy::implies은 항상 액세스 권한을 부여합니다. 그러나 사용자 지정 SAM과 같은 수공예 공급자는 다른 곳에서 해당 지식을 검색 할 수 있으므로 @RolesAllowed 및 그 위임자는 여전히 작동합니다. 결국 Java EE 보안 모델 (예 : Subject 채우기의 배관 작업 포함)을 요청 '스레드'AccessControlContext에 바인딩하고 Subject::doAs(Privileged) 호출을 처리하는 등의 작업이 관련성이없는 것처럼 보였습니다. 제약 조건을 갖습니다. 당연히 귀하의 요구 사항이 번거 로움을 정당화하는지 여부에 대한 의문은 여전히 ​​남아 있습니다.