使用CXF实施OAuth2授权服务器

时间:2014-10-29 21:04:34

标签: java oauth-2.0 cxf

我想仅使用CXF 3实现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()。 security.oauth2.services.AuthorizationCodeGrantService@2bb3be89 with params []。
警告o.a.c.j.i.WebApplicationExceptionMapper - javax.ws.rs.NotAuthorizedException: HTTP 401 Unauthorized

&#34;&GT;&GT;&GT;&GT;&GT; getClient&#34;不会出现在日志中,来自OAuthDataProviderImpl的getClient()是不是应该被调用?

如果xml配置文件或web.xml中缺少某些内容,请告诉我们,谢谢!

1 个答案:

答案 0 :(得分:0)

自己搞乱了CXF OAuth2。而且您似乎没有发送HTTP基本身份验证标头。这将拒绝该请求,因为客户ID和秘密应该来自该地址。