私は、Scott MilletによるProfessional ASP.NET Design Patternsのケーススタディに従っています。このケーススタディでは、認証はインフラストラクチャプロジェクトで処理されます。これには、AspFormsAuthentication:IFormsAuthentication、AspMembershipAuthentication:ILocalAuthenticationServiceなどの実装が含まれています。DDD認証サービス
これは正常に動作しますが、これは組み込みのメンバーシッププロバイダを使用しているためですが、私はそうではないので、私のリポジトリにアクセスする必要があります。私のシナリオでは、ILocalAuthenticationServiceとAspMembershipAuthenticationの実装をServicesプロジェクトに配置するほうがよいでしょうか?
は私が他の場所でこれを聞くと、誰かが答えた:私はまだ、この層は、他の水平層に垂直方向に整列させ、すべての層が、それへのアクセス権を持っているとして、インフラストラクチャ層に資格情報をプルする機能を置きます。 ASP.NETメンバーシッププロバイダを使用しておらず、暗号化された資格情報を使用するだけのカスタムを使用している可能性があるため、インフラストラクチャレイヤを使用してこれらの資格情報のアクセスをラップし、サービスレイヤにそれらを取得させて渡すことができますが、データがどのように取得/永続化されるかを理解しているレイヤーが多すぎるし、必要な権限アクセスが必要です。
グレート。意味あり。しかし、私はここからどこに行くべきか分からない。ケーススタディからのコード:私は、データベースに接続するのですか
public class AspMembershipAuthentication : ILocalAuthenticationService
{
public User Login(string email, string password)
{
User user = new User();
user.IsAuthenticated= false;
if (Membership.ValidateUser(email, password))
{
MembershipUser validatedUser = Membership.GetUser(email);
user.AuthenticationToken = validatedUser.ProviderUserKey.ToString();
user.Email = email;
user.IsAuthenticated = true;
}
return user;
}
public User RegisterUser(string email, string password)
{
MembershipCreateStatus status;
User user = new User();
user.IsAuthenticated = false;
Membership.CreateUser(email, password, email,
Guid.NewGuid().ToString(), Guid.NewGuid().ToString(),
true, out status);
if (status == MembershipCreateStatus.Success)
{
MembershipUser newlyCreatedUser = Membership.GetUser(email);
user.AuthenticationToken = newlyCreatedUser.ProviderUserKey.ToString();
user.Email = email;
user.IsAuthenticated = true;
}
else
{
switch (status)
{
case MembershipCreateStatus.DuplicateEmail:
throw new InvalidOperationException(
"There is already a user with this email address.");
case MembershipCreateStatus.DuplicateUserName:
throw new InvalidOperationException(
"There is already a user with this email address.");
case MembershipCreateStatus.InvalidEmail:
throw new InvalidOperationException(
"Your email address is invalid");
default:
throw new InvalidOperationException(
"There was a problem creating your account. Please try again.");
}
}
return user;
}
}
私はメンバシッププロバイダを使用していない場合は、他の可能性のチェックの中で、ユーザー名とパスワードが一致かどうかを確認するには?
認証はアプリケーションレベルの懸案事項です。あなたのドメインの一部ではありません。 – jfar