繁体   English   中英

使用Apache CXF和OAuth 2.0保护JAX-RS

[英]Securing JAX-RS with Apache CXF and OAuth 2.0

我想在我的JAX-RS RESTful服务上实现OAuth 2.0授权。

经过一些研究,我发现Apache CXF就是这么做的。 但是,我没有找到任何关于它的例子,对我来说还不清楚。 在哪里可以找到一些带有OAuth 2.0的JAX-RS示例?

免责声明:此答案并未真正提供使用OAuth 2.0保护JAX-RS的解决方案。 但它的目的是为Mohasin Ali提供一些见解,他在我的问题上开始获得赏金。 也许,我使用的解决方案对他有用。


关于赏金:

这个问题广泛适用于大量受众。 需要详细的规范答案来解决所有问题。

在不久前提出这个问题之后,我意识到OAuth 2.0 对于我的要求来说太复杂了 即使是基本身份验证也足以满足我的要求。 但我最终使用了基于服务器端签名的JWT令牌的身份验证方案。 我在这个答案中描述了我的解决方案

Apache CXF提供了OAuth 2.0的实现 如果您想使用OAuth保护API,可能值得一看。 Apache CXF还支持OAuth 1.0

您决定使用的身份验证方法无关紧要,请在HTTPS连接的顶部执行此操作。 你需要一份证书。 作为建议,请看看Let's Encrypt 他们声称自己是一个免费的,自动化的,开放的证书颁发机构,目前由Mozilla,Akamai,思科,Chrome,Facebook和其他机构赞助。


关于以下情况, 评论中提到:

[...]恶意用户访问某人的计算机,打开浏览器,查看访问令牌并将访问令牌复制到他自己的浏览器[...]

如果恶意用户具有对计算机的物理访问权限,则HTTPS不会阻止此恶意用户从某人的计算机上窃取身份验证令牌。 实际上,如果它发生了,我认为你应该有更大的顾虑......

对于额外的安全层,您可以考虑将令牌与您为其颁发令牌的用户的IP地址一起存储。 对于每次访问API的请求,请将传入请求的IP与您为其颁发令牌的用户的IP进行比较。 如果IP不匹配,请拒绝该请求。

如果您使用JWT令牌,而不是存储整个令牌,则仅存储JWT ID声明jti )。 只需确保此值是唯一的( java.util.UUID应足以生成jti值)。

对于完全无状态的身份验证(不存储整个令牌既不存储令牌ID),您可以将IP地址存储在JWT令牌声明中,但请注意令牌将长几个字节。

有关一个示例,请参阅https://github.com/Talend/tesb-rt-se/tree/master/examples/cxf/jaxrs-oauth2 ,它有一个并置的示例(所有端点在同一个容器中),而且更复杂一个分发端点,SAML SSO Web配置文件支持SSO。

暂无
暂无

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

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