将c# REST API安全地暴露给脚本语言(如Python)

本文关键字:语言 脚本 Python 暴露 REST API 安全 | 更新日期: 2023-09-27 18:15:24

我的c# REST API是从AngularJS web应用程序调用的。我通过验证用户并确保用户是特定windows组的一部分来保护web API。

现在客户想要从脚本(Python)调用API的选项。我该如何实现呢?我应该让他们传递用户名和密码作为json调用的一部分吗?

将c# REST API安全地暴露给脚本语言(如Python)

如果您可以轻松地在Python中增加头信息,我建议您使用令牌身份验证。微软不直接提供这种类型的认证,而是通过OWIN项目提供。它并不难用,但你需要先了解它是如何工作的。这里有一个非常好的和全面的教程。

基本上,您通过提供用户名/密码获得令牌(在一段时间内有效)。这个令牌是加密的/签名的,这意味着你的后端将信任它,而不需要对每个请求验证用户名/密码(这是昂贵的)。然后,您需要为每个请求将此令牌添加到标头Authorization bearer token或类似的内容中。另外,我认为如果你愿意,你可以在cookie中使用令牌来保持向后一致性。

我建议你在Angular中也使用同样的机制,因为你可以很容易地在那里添加一个拦截器,从而避免cookie和CSRF带来的潜在问题。

使用与当前使用的完全相同的身份验证方法。

下面是一个使用python(未测试)的基本示例:
from requests.auth import HTTPBasicAuth
s = requests.Session()
# Make the initial authentication request from a session object
s.get('https://omg.wtf/user', auth=HTTPBasicAuth('user', 'pass'))
# All subsequent requests from that session will include any cookies set in the initial response
r = s.get('http://omg.wtf/911')
print(r.text)