我目前正在开发API,但我对如何保护它有点困惑。我不想重新发明轮子,而且我不是加密专家。
我目前的计划如下;
检查客户端是否通过HTTPS进行通信
检查客户端是否有令牌,如果他们确实有验证,否则让他们登录(返回401)
要验证令牌,我会检查它是否存在于数据库中,是否检查它是否已过期。
如果令牌不存在,我会要求他们进行身份验证。这将涉及通过HTTPS将其用户名和密码发送到服务器,我会使用传统方法检查它(哈希,加盐,比较等)如果全部检出,那么我就创建一个会话密钥/ token / random字符串以及将来的所有请求都要求他们发送API请求。
这听起来像是一种明智的做法吗?
由于
答案 0 :(得分:0)
您可以选择使用单点登录并将令牌生成委派给安全令牌服务,例如Thinktecture's Identity Server。 然后在API端,您将只需配置承载令牌认证,如下所示:
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = "https://localhost:44319/identity",
RequiredScopes = new[] { "sampleApi" }
});
此处的完整示例:https://identityserver.github.io/Documentation/docs/overview/mvcGettingStarted.html。
答案 1 :(得分:-1)
对于初学者来说,这听起来不错。您在考虑的是基本身份验证,然后是基于令牌的授权。但是你也应该考虑使用某种混淆技术来发送用户名和密码。像base64一样,它只有你的算法可以在服务器端解密的特定格式。这是一个很好的教程,可以帮助您:http://www.codeproject.com/Articles/1005485/RESTful-Day-sharp-Security-in-Web-APIs-Basic