2014-10-29 70 views
0

我想僅使用CXF 3實現OAuth2授權服務器(無資源)。 目標是獲得我可以在單獨的資源服務器上使用的令牌。 我已經花了數小時試圖找到沒有成功的好文檔或教程。使用CXF實現OAuth2授權服務器

這裏是我的編碼迄今:
cxf.xml

<bean id="oauthProvider" class="com.mycompany.OAuthDataProviderImpl"/> 

<bean id="accessTokenService" class="org.apache.cxf.rs.security.oauth2.services.AccessTokenService"> 
    <property name="dataProvider" ref="oauthProvider"/> 
</bean> 

<bean id="authorizationService" class="org.apache.cxf.rs.security.oauth2.services.AuthorizationCodeGrantService"> 
    <property name="dataProvider" ref="oauthProvider"/> 
</bean> 

<jaxrs:server id="oauthServer" address="/oauth"> 
    <jaxrs:serviceBeans> 
     <ref bean="accessTokenService"/> 
     <ref bean="authorizationService"/>   
    </jaxrs:serviceBeans> 
</jaxrs:server> 

的web.xml

<servlet> 
    <servlet-name>cxf</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>cxf</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

OAuthDataProviderImpl類擴展AbstractOAuthDataProvider並實現OAuthDataProvider和含有此方法:

@Override 
public Client getClient(String clientId) throws OAuthServiceException { 
    // TODO Auto-generated method stub 
    System.out.println(">>>>> getClient"); 
    return null; 
} 

當我運行的服務器,並嘗試加載
/OAuth的/授權?CLIENT_ID = 123456789 &範圍= scopeTest7 & RESPONSE_TYPE =代碼& REDIRECT_URI = someUrl &狀態= 1
我得到的控制檯

DEBUG oacsinvoker.AbstractInvoker - 在對象org.apache.cxf.rs上調用方法public javax.ws.rs.core.Response org.apache.cxf.rs.security.oauth2.services.RedirectionBasedGrantService.authorize()。帶有params []的[email protected]
WARN oacjiWebApplicationExceptionMapper - javax.ws.rs.NotAuthorizedException:HTTP 401未授權

「>>>>> getClient」 沒有出現在日誌中,來自OAuthDataProviderImpl getClient()不應該是叫什麼名字?

請讓我知道如果從XML配置文件或web.xml中缺少的東西,謝謝!

回答

0

我一直在與CXF OAuth2搞混。而且好像你沒有發送HTTP基本認證頭。這將拒絕該請求,因爲這是客戶端ID和祕密應該來自的地方。