在SaaS环境中使用客户端密钥的最佳实践

时间:2015-12-22 14:10:18

标签: c# sql-server api rest asp.net-web-api

Asp.NET Web API 在全新客户注册时生成密钥使用32个字符长的对称算法)存储在数据库列中(对其具有唯一约束)。在整个API使用中,客户端必须在Authorization标头中提供密钥,以便访问其自己的资源(多租户SaaS环境)。目前不需要访问令牌。期望客户密钥的主要原因是从数据库中过滤并提供适当的数据!

我认为在WHERE子句中使用ClientSecretKey从SQL表中获取客户端数据不会对性能友好,例如:

SELECT Multiple_Columns from ClientTable WHERE ClientSecretKey='X3i1aBer'

理想情况下,我更倾向于使用ClientId来获取客户端记录,ClientId在表中被定义为 IDENTITY 列。

问题:

  1. 如何最好地设计一个唯一客户端密钥,在对数据库执行查询以获取特定客户端记录时,该密钥应该是绝对性能友好的?
  2. 我的想法或设计有任何缺陷吗?
  3. 任何想法都会非常感激。

    谢谢!

1 个答案:

答案 0 :(得分:0)

您的客户可能会传入ID和密钥。将这些视为用户名和密码。这大大降低了那些只是在API上抛出一堆字符的人滥用的可能性。

ID和密钥列都应该在数据库中编入索引,以避免出现性能问题。

对于像这样的简单字符串键,如果键不匹配,数据库不会给我任何结果,这是我个人的偏好。这样,我不必担心将某些安全泄漏发送回客户端。

所以,是的,密钥应该在where子句中,但它不应该是where子句中唯一的东西。