Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何为我的Web API Web服务实现身份验证和授权?_Asp.net Mvc_Web Services_Security_Asp.net Web Api - Fatal编程技术网

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

Asp.net mvc 如何为我的Web API Web服务实现身份验证和授权?,asp.net-mvc,web-services,security,asp.net-web-api,Asp.net Mvc,Web Services,Security,Asp.net Web Api,我有一个Web API Web服务,它被许多采用不同技术的客户端应用程序使用,如Java、.NET等。因此,我的用户凭据存储在一个单独的数据库中 我的Web服务托管在IIS中,我在服务器端配置并启用了SSL,以确保请求/响应消息得到加密和签名 我还配置了IIS的IP地址限制功能,允许来自少数已知IP地址的请求 我不喜欢使用基本身份验证,因为它会在每条消息中以纯文本形式发送凭据,尽管消息是使用SSL加密的 显然,我无法使用集成Windows身份验证,因为我的用户与我的服务器不在同一个域中 我无法使

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

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

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

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

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

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

那么,为我的web服务实现身份验证和授权的最佳方法是什么

我在想一种方法是提供一个身份验证(用户名、密码)web方法,该方法的行为类似于身份提供者/安全令牌服务,并生成特定于该用户的令牌,该令牌在特定时间后过期。然后,客户端必须随每个web方法请求发送身份验证令牌,我通过为我的控制器创建自定义授权筛选器来确保这一点

这种方法的优点是,用户不必在每个请求中发送用户名/密码,而只需发送一个临时令牌。缺点显然是管理令牌寿命;什么时候到期?e、 g.如果在一小时内没有提出要求


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

在facebook中,它们提供了一个应用程序的访问令牌,只有在密码更改或用户专门取消对应用程序的授权时才会更改。你们很多人都在考虑这种方法。这在谷歌的MapAPI中也是如此。我认为唯一安全的方法是检查请求的来源(请求的IP地址),然后检查apikey,然后做出响应。

IP地址很容易被欺骗,所以不要依赖它们来保护您的服务


我建议您只允许通过HTTPS进行访问,为了进一步保护它,请验证签署请求的证书。更好的是,拥有自己的证书服务器并为此颁发自己的证书。

我将在有关SOAP服务的评论中介绍身份验证选项。授权是在服务器应用程序中实现的,并且大部分与所选的身份验证类型无关。 web服务有三(3)种分类: -私人的 -社区 -公开的

听起来您提供的web服务是一种社区服务,因为它只对受信任的合作伙伴可用。我之所以知道这一点,是因为您解释说在IIS中配置了IP地址限制。包括IP地址限制是实现安全web服务的许多好措施之一。安全不是一回事。这是许多防御措施的积累。IP地址限制是一个良好的开端

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

HTTP基本身份验证是一个不错的选择。它受到所有客户端和服务器应用程序的支持,易于实现。我喜欢将HTTP基本身份验证视为最低公分母。我不排除这种可能性。HTTP基本身份验证包括明文形式的HTTP头中的凭据,因此始终建议包括SSL(HTTPS)来加密传输通道

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

另一个选项是客户端证书身份验证。此选项使用数字证书作为身份验证令牌,而不是用户名/密码。这种方法工作得很好,但需要web服务团队成员和客户端应用程序团队成员都熟悉SSL数字证书作为先决条件。该方法的学习曲线高于其他方法

您描述的自定义解决方案不是必需的,因为有太多行业标准用于实现和解决您寻求的解决方案。例如,如果在web服务中实现WS-Security,则不必向客户端应用程序团队提供文档并解释如何在其客户端应用程序中实现它。WS-Security是一个行业标准,目前大多数现代SOAP服务器和SOAP客户机都对其进行了详细的记录和支持。这同样适用于HTTP基本身份验证

我希望这有帮助。干杯,DCova

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

SSL是传输安全性,而不是消息安全性。它不会为您在邮件上签名。它对频道进行加密。