繁体   English   中英

使用CXF实施OAuth2授权服务器

[英]Implementing an OAuth2 authorization server with 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 / authorize?client_id = 123456789&scope = scopeTest7&response_type = code&redirect_uri = someUrl&state = 1
我知道了,在控制台中

DEBUG oacsinvoker.AbstractInvoker-调用对象org.apache.cxf.rs.security.oauth2上的方法public javax.ws.rs.core.Response org.apache.cxf.rs.security.oauth2.services.RedirectionBasedGrantService.authorize()。 services.AuthorizationCodeGrantService@2bb3be89,带有参数[]。
警告oacjiWebApplicationExceptionMapper-javax.ws.rs.NotAuthorizedException: HTTP 401未经授权

“ >>>>> getClient”未出现在日志中,不应调用OAuthDataProviderImpl中的getClient()吗?

请让我知道xml配置文件或web.xml中是否缺少某些内容,谢谢!

我自己一直在搞CXF OAuth2。 而且似乎您没有发送HTTP基本身份验证标头。 这将拒绝该请求,因为这应该是客户端ID和机密的来源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM