假设用户使用基本身份验证提交其凭据。我有一个自定义消息处理程序,它从标头中检索凭据:
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
System.Threading.CancellationToken
cancellationToken)
{
try
{
// Request Processing
var headers = request.Headers;
if (headers.Authorization != null && SCHEME.Equals(headers.Authorization.Scheme))
{
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string credentials = encoding.GetString(Convert.FromBase64String(headers.Authorization.Parameter));
string[] parts = credentials.Split(':');
string userId = parts[0].Trim();
string password = parts[1].Trim();
// TODO: Authentication of userId and Pasword against credentials store here
我想知道 - 当我在这里实际验证用户 ID 和密码时,我很想将这种方法的明文与存储在数据库中的明文进行比较,但我知道这是不安全的。我是否应该同时对来自标头的明文和存储在数据库中的凭据进行哈希处理以进行间接比较?
如果是这样,在它们被散列之前,似乎凭证在消息处理程序中是纯文本的。这是否存在任何类型的安全漏洞,或者可以吗?