安全地将C#REST API暴露给Python等脚本语言

Rob*_*boy 9 c# python security rest

我的C#REST API是从AngularJS Web应用程序调用的.我通过验证用户并确保用户是特定Windows组的一部分来保护Web API.

现在,客户希望从脚本(Python)调用API.我该如何实现?我应该让他们通过用户名和密码作为json调用的一部分吗?

Ily*_*dik 5

如果你可以轻松地在Python中扩充标题,我建议你使用令牌认证.Microsoft不直接提供此类auth,而是通过OWIN项目提供.这并不难,但你需要先了解它的工作原理.有一个很好的和全面的教程在这里.

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

我建议您在Angular中使用相同的机制,因为您可以轻松地在那里添加拦截器并避免使用cookie和CSRF潜在的麻烦.


Sea*_*urn 3

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

这是一个使用 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)
Run Code Online (Sandbox Code Playgroud)