XML-RPC 的非交互式身份验证/授权?

Posted

技术标签:

【中文标题】XML-RPC 的非交互式身份验证/授权?【英文标题】:Non-interactive authentication/authorization for XML-RPC? 【发布时间】:2010-09-14 19:53:09 【问题描述】:

我们并不完全符合 XML-RPC 规范,但概念几乎相同。客户端通过带有 XML 有效负载的 HTTP/HTTPS 进入。我们以响应请求的 XML 有效负载进行响应。这主要是机器对机器,所以没有人输入用户名/密码。我们的构造在 apache tomcat 中运行。我们想对请求进行身份验证,由于并非每个客户端都可以使用每个服务,因此我们还需要对请求进行授权。我们有订阅和按使用收费模式,因此有必要记录所有内容。

你会为服务器和客户端推荐什么?

【问题讨论】:

【参考方案1】:

HTTP BASIC/DIGEST 适用于大多数机器到机器的任务,它由服务器处理,因此您的 API 不受影响。

它不适用于交互式使用,因为在不关闭浏览器的情况下很难“注销”用户。

否则,您很可能需要更改您的 API 以包含身份验证信息,并让您的方法在您的代码中对其进行身份验证。

或者您可以使用经典的“登录”,设置 cookie,保持会话技术。

但是,坦率地说,对于机器对机器的工作,HTTP BASIC 是最简单的。

编辑,关于 cmets。

HTTP BASIC 是一种简单的协议,用于呈现身份验证所需的工件,它适用于机器对机器的 Web 服务。

如何实施取决于您和您的应用程序。使用 Java,您可以使用容器身份验证,这将提供身份验证以及角色映射。用户 -> 角色映射在数据文件或数据库中处理。受保护的 URL 以及对每个 URL 有效的角色由 web.xml 管理。

如果您继续向不同的 URL 添加不同的角色,那么,是的,您需要重新部署该应用程序。

但是,如果您只是添加新用户,那么您只需更新您的文件或数据库。如果您要添加新逻辑和新 URL,那么无论如何您都必须重新部署。如果你有一个粒度足够细的 ROLE 结构,那么在你真正添加新方法之前,你就不必弄乱 web.xml。例如,您可以在极端情况下为每个方法创建一个角色,并将它们单独分配给用户。大多数人不需要走那么远。

如果您不想使用容器身份验证,请编写一个 Servlet 过滤器来实现您将用户和角色映射到 URL 的愿景。即使您实现了自己的设施,您仍然可以为您的客户端使用 HTTP BASIC 协议。

如果您正在寻找一个整体通用的 Java 安全框架,我会参考 google —— 有几个,我没有使用过任何一个。我在容器身份验证和编写我们自己的身份验证方面很幸运。

【讨论】:

这对授权没有任何作用。 我也看不到使用不断编辑 web.xml 文件并将其作为身份验证的唯一数据存储。难道我们不也必须反弹 tomcat 才能生效吗?【参考方案2】:

@威尔

我支持 HTTP Basic 建议,并且可以证明它与 Spring Security 的集成相当好,这是我在一个遗留应用程序之上实现的,该应用程序采用了自己的基于 DB 的身份验证/授权逻辑。

【讨论】:

以上是关于XML-RPC 的非交互式身份验证/授权?的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD 身份验证令牌未通过 Web api 授权

单页应用程序中的安全身份验证/授权

什么是身份验证和授权 身份验证和授权介绍【详解】

与 Django Rest Framework 的非用户连接的自定义身份验证

WCF 用户身份验证和授权

PayPal PHP SDK:由于身份验证凭据无效或缺少授权标头,身份验证失败