【問題描述】
應用服務器是集羣環境時,單點註銷有一定概率無法成功。
【原因分析】
當CAS中的TGT過期需要頒發TGT時,CAS不會向已登陸過的應用主動發送回調註銷請求;當應用主動申請註銷時(用戶點擊註銷),CAS會向所有已登錄的應用(該TGT授權的所有應用)發送回調註銷請求。
回調註銷請求格式爲:
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="LR-35-TnqkeQMWcejJNu0FJe9YJ0PTKdsI3cpT7Yh" Version="2.0" IssueInstant="2013-12-18T14:00:29Z">
<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">NOT_USED</saml:NameID>
<samlp:SessionIndex>ST-39-JS2XCddTRpOghTxomcOB-cas</samlp:SessionIndex>
</samlp:LogoutRequest>
【分析結果】
當有用戶主動點擊註銷按鈕,CAS會做一個全局登出的動作(向所有登陸過的應用服務器發送回調註銷請求),此時回調註銷請求可能發送到用戶沒有登錄的應用服務器(用戶訪問了應用的server1,註銷請求發送給了應用的server2),這就會導致應用註銷不成功。