2011-08-12 73 views
1

我正在嘗試開發一個使用Websphere 7和JAX-WS的WS-Security的Web服務。通過一些指南,看起來我必須創建一個應用程序服務器用戶註冊表並維護該服務器內的用戶名/密碼。有沒有辦法避免必須在服務器本身創建用戶名,並以某種方式捕獲頭部並根據另一個自定義安全配置(如單點登錄)進行驗證?WS-Security Websphere配置

我能夠創建一個處理程序來獲取標題,但是當請求中的mustUnderstands設置爲1(這是強制性的)時,它會在我的處理程序看到消息之前被拒絕。

我只想使用WS-Security的UsernameToken部分。

任何幫助表示讚賞。

我的要求

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header> 
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1"> 
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" Id="unt_20"> 
     <wsse:Username>some_username</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">some_password</wsse:Password> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    </soapenv:Header> 
    <soapenv:Body> 
    ...body... 
    </soapenv:Body> 
</soapenv:Envelope> 

的一個例子是有可能創建一個自定義的安全實現,所以我可以用我現有的用戶驗證方案?

回答

0

你能說說你想達到什麼嗎?

WAS服務器需要根據用戶註冊表(可能是LDAP,基於文件的註冊表等)驗證標頭中的用戶名和密碼。

也可以使用LTPA令牌(WebSphere和相關產品用於SSO)。

如果你明確你的要求,這裏的人可以幫助你。

HTH

Manglu

+0

的主要問題是,我不希望有另一個地方來存儲用戶名和密碼。有一個現有的服務,允許我們發送用戶名和密碼,以獲得角色並進行驗證。這是中央存儲庫,我想用它來代替將它們放入WAS中。 – Nick

0

JAX-WS應該讓你有一個自定義的攔截器。

看看這個spring配置,看看我是如何在服務端點添加一個攔截器的。

<jaxws:endpoint id="pqdws" 
       implementor="#Atypon" 
       address="/pqdws" 
       publishedEndpointUrl="@[email protected]"> 
    <jaxws:properties> 
     <entry key="exceptionMessageCauseEnabled" value="true"/> 
     <entry key="Content-length" 
    </jaxws:properties> 
    <jaxws:inInterceptors> 
     <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> 
      <constructor-arg> 
       <map> 
        <entry key="action" value="UsernameToken"/> 
        <entry key="passwordType" value="PasswordText"/> 
        <entry key="passwordCallbackRef"> 
         <ref bean="passwordCallback"/> 
        </entry> 
       </map> 
      </constructor-arg> 
     </bean> 
    </jaxws:inInterceptors> 
    </jaxws:endpoint> 

    <bean id="passwordCallback" 
     class="access.ws.ServerPasswordCallback"> 
    <property name="username" value="@[email protected]"/> 
    <property name="password" value="@[email protected]"/> 
</bean> 

攔截器可以做任何你想做的事情,包括呼叫到外部服務進行認證。

+0

這很有趣。我把一個攔截器,但它沒有趕上的反應,直到WAS試圖驗證它。 – Nick

0

您可以使用策略/綁定外的箱的WS-Security運行時實現這一點,但你必須編寫自定義代碼來替代默認檢查UsernameTokens用戶註冊表的行爲。

請參閱本文消耗的UsernameToken在使用自己的身份驗證機制:

http://www-01.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/twbs_replace_authmethod_usernametoken.html

,如果你想基於該令牌的用戶名也創建的WebSphere憑據請參閱本文

http://www-01.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/twbs_config_wssec_caller_no_reg.html

+0

對於任何人認爲這個帖子應該被刪除,因爲它有鏈接,我不能創建一個帖子的鏈接內容。引擎堅持認爲代碼沒有正確格式化,所以我不能發佈它(代碼編譯,我已經標記了它,並做了至少10倍的ctrl-k沒有結果)。如果有人認爲他們可以從這些鏈接中創建一個超長的帖子,請做。 –

相關問題