2014-10-29 42 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和秘密应该来自的地方。