我正在编写一个公开 REST API 的普通 JAX-RS Web 应用程序;我使用 Spring,但仅用于实际配置,并依赖普通 CXF 和 Hibernate 来实现所有其他功能。
我现在想使用 OAuth 1.0 保护 API 的某些部分。为此,我尝试使用 org.apache.cxf.rs.security.oauth.provider.OAuthDataProvider
(以及其他一些 bean)与我的数据库结合使用。
但是,我发现文档非常不清楚,并且很难找到说明如何使用此 bean 的示例。具体来说,这些事情尚不清楚:
createAccessToken
和createRequestToken
方法应该创建 token 。我想必还必须将生成的 token 保存到数据库中。但每个代币我必须坚持多少?存储(consumerKey, tokenId, tokenSecret)
是否足够,或者是否还需要持久保存,例如客户端密码、回调 URI、范围等?- 同样,在
getAccessToken
和getRequestToken
中,我需要“填写”多少内容才能使服务正常工作?提供 token ID 和 key 是否足够,还是我真的还必须提供整个Client
对象等? - 我到底需要在
finalizeAuthorization
中提供什么? - 如果我跳过执行上述任何操作(例如,不在
getAccessToken
中设置客户端 key ),我会失去某些功能吗?
我对 OAuth 1.0 协议(protocol)有相当扎实的了解;上述大多数问题的原因是很难辨别 CXF 为我跟踪的内容。
最佳答案
我同意 Writing OAuthDataProvider of OAuth 1.0 JAX-RS documentation for CXF 部分的详细信息确实很差。 。我想说 CXF 不会跟踪任何内容,因为该接口(interface)应该提供 token 创建和持久性。
您可以完全自由地选择如何进行 token 创建和持久化,无论是使用内存存储还是使用直接 JDBC 或 Hibernate 进行数据库持久化。
我建议您从以下示例中获得灵感:
- Sample implementation (in memory)来自CXF,也许还有它的initial commit在沙箱中。
- globus-oauth-demo项目
...并猜测调试 session 中的剩余详细信息。
希望这有帮助
关于java - JAX-RS Web 应用程序中的 Apache CXF OAuthDataProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715555/