おはようございます。私は現在、Xamarin.Formsポータブルアプリケーションでログインフォームを作成しています。私はWebFormsProjectを持っています。そこでは、ユーザーが入力したユーザー名とパスワードと、データベースに保存されたユーザー名とパスワードを比較するAPIコントローラーを作成しました。ASP.NETアイデンティティのパスワードをハッシングする方法Crypto.HashPasswordと比較して
データベースに保存されているパスワードは、ASP.NET IDを使用してハッシュされています。ユーザーが入力するパスワードは、Crypto.HashPassword(このクラスがASP.NET Identityのものかどうかはわかりません)を使用してハッシュされます。
どうすればこの2つを比較できますか?
2つのパスワードが一致した場合は 'true'、そうでない場合はfalseを返します。私は今混乱している段階です。あなたが私を助けてくれることを願います。ありがとう。
ここにいくつかのコードがあります。
LoginController.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;
using WebFormsDemo;
using WebFormsDemo.ViewModel;
using System.Security.Cryptography;
using System.Web.Helpers;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security;
using Microsoft.AspNet.Identity.EntityFramework;
namespace WebFormsDemo.Controllers
{
public class LoginController : ApiController
{
private EBMSEntities db = new EBMSEntities();
// GET: api/Login
[Route("api/Login/Search/{username}/{password}")]
[ResponseType(typeof(List<AspNetUser>))]
public bool getUsernamePassword(string username, string password)
{
var hashedPassword = "";
hashedPassword = Crypto.HashPassword(password);
var pass = (from u in db.AspNetUsers
where u.UserName.Equals(username)
select u.PasswordHash).Take(1);
string hashpassinDb = Convert.ToString(pass.FirstOrDefault());
return Crypto.VerifyHashedPassword(hashpassinDb, hashedPassword);
}
}
}
どうすればよいですか?それは単なる宣言ですか? ASP.NETアイデンティティではどのようなハッシュアルゴリズムが使用されていますか? –
@JayceeEvangelista、*これで何をすればいいですか?*これを使用して問題を解決することができます*単なる宣言ですか? * ASP.NETアイデンティティではどのようなハッシュアルゴリズムが使用されていますか?これは同じです:https://brockallen.com/2012/10/19/password-management-made-easy-in-asp-net-with-the- crypto-api /) –
私のコードに適用しました。 Crypto.HashedPasswordを使用すると、データベースに保存されているハッシュ値とは異なるハッシュ値が生成されることがわかります。彼らは異なるハッシュアルゴリズムを持っているためです。 –