【发布时间】:2014-01-26 01:02:30
【问题描述】:
我有一个使用 Java JAX-RS 构建的 REST API,该 API 将公开并受 OAuth 2.0 保护。
我计划从我正在构建的内部项目中使用此 API,因为它是我的 API,我不希望用户授权我调用此 API。
现在,我正在使用过滤器来检查访问令牌并根据我的 OAuth 提供程序验证它,配置示例:
<!-- Exposing the facility service as a REST service -->
<jaxrs:server id="restContainer" address="/">
<jaxrs:serviceBeans>
.. services beans
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="oauthFilter"/> <-- filter to validate oauth
<ref bean="apiUsageFilter"/> <-- filter to check api usage (integrated with 3scale)
<ref bean="jacksonProvider" />
<ref bean="exceptionMapper" />
</jaxrs:providers>
<jaxrs:extensionMappings>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
<entry key="html" value="text/html" />
</jaxrs:extensionMappings>
<jaxrs:features>
<bean class="org.apache.cxf.feature.LoggingFeature"/>
</jaxrs:features>
</jaxrs:server>
我想知道是否可以实现一个新的过滤器来检查调用的来源,如果它来自列出的 ip(s)/domain(s) 则绕过 oauth,如果不是,则继续使用 oauth。
这种方法可行吗?这是一个好习惯吗?利弊?
谢谢!
【问题讨论】:
-
帮助? :) 我得到的一个想法是实现一个过滤器,允许特定的(预定义的)应用程序 ID(或称为客户端 ID)通过绕过 oauth 交互来调用 API,并且它有效!但是调用者需要在调用的查询字符串中指定他们的客户端 ID/秘密 ID 的缺点,所以如果我需要在移动应用程序中使用它,它可以很容易地被任何开发人员嗅探并开始使用该 ID 绕过 oauth,看来我需要实现一个代理来隐藏这些客户端 ID/密钥。如果有人对我原来的问题有答案,我真的很感激:)