블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
04-23 19:30
 

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
 

최근에 올라온 글

최근에 달린 댓글


CasValidationFilter 를 Cas20ProxyReceivingTicketValidationFilter 로 테스트 했을 때, principal.getAttributes() 가 null 로 반환되어 어쩔 수 없이 Saml11TicketValidationFilter 를 사용하였습니다.

오늘 CAS Client 설정 메뉴얼을 작성하면서 Cas20ProxyReceivingTicketValidationFilter 로 설정하도록 한 것 때문에 같이 연동을 했던 분이 attributes 를 가지고 올 수 없었습니다.
당근 아저씨한테 물어보니 맨 처음 썼던 것 처럼 null 로 반환되는 문제 때문에 SAML로 하셨다고 하네요...

혹시 무언가 방법이 있을 것 같아 찾아보니 아래와 같은 방법이 있었습니다.

http://www.ja-sig.org/issues/browse/CAS-655

위의 방법은 CAS Server 의 /WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp 파일을 수정하는 것이었습니다.
<%@ page pageEncoding="UTF-8"%><%@ page session="false" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
 <cas:authenticationSuccess>
  <cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>
  <cas:attributes>
   <c:forEach var="attr"
    items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}"
    varStatus="loopStatus" begin="0"
    end="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)-1}"
    step="1"><cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
   </c:forEach>
  </cas:attributes>

<c:if test="${not empty pgtIou}">
  <cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
</c:if>
<c:if test="${fn:length(assertion.chainedAuthentications) > 1}">
  <cas:proxies>
<c:forEach var="proxy" items="${assertion.chainedAuthentications}" varStatus="loopStatus" begin="0" end="${fn:length(assertion.chainedAuthentications)-2}" step="1">
   <cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
</c:forEach>
  </cas:proxies>
</c:if>
 </cas:authenticationSuccess>
</cas:serviceResponse>
해당 파일을 열고 붉은 부분을 추가합니다. pageEncoding 은 해당 서버의 charset 에 맞게 설정합니다.



잘 나오는 것을 확인하였습니다. 일단 CAS 2.0 protocol 을 사용하는 것이 옵션도 많아서 일단은 이걸로 쭉~ 가볼 생각입니다.


Posted by 자수씨
, |
...
<Status><StatusCode Value="samlp:Success"></StatusCode></Status>
...

Response SAML에서는 저런식으로 Success가 나오는데...

javax.servlet.ServletException: org.jasig.cas.client.validation.TicketValidationException: No valid assertions from the SAML response found.
클라이언트에서 로그인할 때 저런 메시지가 나온다면...

CAS 서버나 클라이언트의 시간을 확인해보시면 됩니다.
서버 시간이 클라이언트 시간보다 말도 안되게 느리면 나오는 문제입니다.


지난 번에 당근아저씨가 겪언던 문제라 1시간만 삽질하고 해결!!!


tolerance 가 작게 잡혀 있으면 서버시간 보다 클라이언트 시간이 조금만 느려도... 문제가 발생하네요...

쩝;;;


Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백