我想仅使用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中缺少某些内容,请告诉我们,谢谢!
答案 0 :(得分:0)
自己搞乱了CXF OAuth2。而且您似乎没有发送HTTP基本身份验证标头。这将拒绝该请求,因为客户ID和秘密应该来自该地址。