gpt4 book ai didi

asp.net-mvc - 如何为我的 Web API Web 服务实现身份验证和授权?

转载 作者:行者123 更新时间:2023-12-01 11:45:24 24 4
gpt4 key购买 nike

我有一个 Web API Web 服务,它被许多采用不同技术(如 Java、.NET 等)的客户端应用程序使用。因此,我的用户凭据是存储在单独的数据库中。

我的 Web 服务托管在 IIS 中,我在服务器端配置并启用了 SSL,以确保对请求/响应消息进行加密和签名。

我还配置了 IIS 的 IP 地址限制功能,以允许来自少数已知 IP 地址的请求。

我不喜欢使用 Basic Authentication,因为它会在每条消息中以纯文本形式发送凭据,尽管消息是使用 SSL 加密的。

我不能使用集成 Windows 身份验证,显然是因为我的用户与我的服务器不在同一个域中。

我无法使用表单例份验证,因为我的客户端不是基于浏览器的。

那么为我的 Web 服务实现身份验证和授权的最佳方式是什么?

我在想一种方法是提供一个Authenticate(username, password) web 方法,它的行为类似于一个Identity Provider/Security-token-service 并生成一个特定于该用户的 token 在特定时间后过期。然后,客户端必须随每个 Web 方法请求发送身份验证 token ,我通过为我的 Controller 创建自定义授权过滤器来确保这一点。

这种方法的优点是用户不必在每次请求时发送用户名/密码,而只需发送一个临时 token 。缺点显然是管理代币生命周期;什么时候到期?例如如果一个小时内没有请求。

为我的 Web 服务实现身份验证和授权的最佳方式是什么?

最佳答案

我将在我对 SOAP 服务的评论中讨论身份验证选项。授权在服务器应用程序中实现,并且与所选的身份验证类型基本无关。Web 服务分为三 (3) 类:-私有(private)的-社区-公开

您提供的网络服务听起来像是一项社区服务,因为它仅供受信任的合作伙伴使用。我知道这一点是因为您解释说在 IIS 中配置了 IP 地址限制。包括 IP 地址限制是实现安全 Web 服务的众多好措施之一。安全不是一回事。它是许多防御的积累。 IP 地址限制是一个好的开始。

Web 服务本质上是无状态的。因此,通常在调用 Web 服务时每个请求都必须包含凭据(用户名和密码)。因此,这不是问题或顾虑。

HTTP 基本身份验证是一个不错的选择。它得到所有客户端和服务器应用程序的支持并且易于实现。我喜欢将 HTTP 基本身份验证视为最低公分母。我不排除它。 HTTP 基本身份验证在 http header 中以纯文本形式包含凭据,因此始终建议包含 SSL (HTTPS) 以加密传输 channel 。

WS-Security 是一种非常常见的 Web 服务授权标准。它是 Web 服务的行业标准,规范由结构化信息标准促进组织 (OASIS) 组织发布。 WS-Security 包含一个用于包含用户名/密码的 UsernameToken 配置文件。 WS-Security block 被添加到 SOAP 消息的 header 中。相比之下,HTTP 基本身份验证被添加到 HTTP header 中。 HTTP 基本身份验证附加到传输协议(protocol)。相比之下,WS-Security 是附加到 SOAP 消息上的。 WS-Security UsernameToken 为纯文本,因此始终建议包含 SSL (HTTPS)。

另一种选择是客户端证书身份验证。此选项使用数字证书代替用户名/密码作为身份验证 token 。这种方法效果很好,但要求 Web 服务团队成员和客户端应用程序团队成员都熟悉 SSL 数字证书作为先决条件。该方法的学习曲线高于其他方法。

您描述的自定义解决方案不是必需的,因为存在如此多的行业标准来实现和解决您寻求的解决方案。例如,如果您在 Web 服务中实现 WS-Security,则不必向客户端应用程序团队提供文档并解释如何在他们的客户端应用程序中实现它。 WS-Security 是一个行业标准,它有很好的文档记录,并且受到当今大多数现代 SOAP 服务器和 SOAP 客户端的支持。这同样适用于 HTTP 基本身份验证。

希望对您有所帮助。干杯,DCova

关于asp.net-mvc - 如何为我的 Web API Web 服务实现身份验证和授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com