Asp.NET Web API 在全新客户注册时生成密钥(使用32个字符长的对称算法)存储在数据库列中(对其具有唯一约束)。在整个API使用中,客户端必须在Authorization标头中提供密钥,以便访问其自己的资源(多租户SaaS环境)。目前不需要访问令牌。期望客户密钥的主要原因是从数据库中过滤并提供适当的数据!
我认为在WHERE子句中使用ClientSecretKey从SQL表中获取客户端数据不会对性能友好,例如:
SELECT Multiple_Columns from ClientTable WHERE ClientSecretKey='X3i1aBer'
理想情况下,我更倾向于使用ClientId来获取客户端记录,ClientId在表中被定义为 IDENTITY 列。
问题:
任何想法都会非常感激。
谢谢!
答案 0 :(得分:0)
您的客户可能会传入ID和密钥。将这些视为用户名和密码。这大大降低了那些只是在API上抛出一堆字符的人滥用的可能性。
ID和密钥列都应该在数据库中编入索引,以避免出现性能问题。
对于像这样的简单字符串键,如果键不匹配,数据库不会给我任何结果,这是我个人的偏好。这样,我不必担心将某些安全泄漏发送回客户端。
所以,是的,密钥应该在where子句中,但它不应该是where子句中唯一的东西。