私は新しいWeb APIを作成し、トークン認証にはOAuth2を、DIにはUnityResolverを使用しています。現時点では、自分のuserRepositoryを使用してユーザーを認証する方法について、いくつかの疑問があります。私はこの二日間、多くのアーティキュールを読んできました。私が主に見つけた解決策は、IStoredUser、IUserを実装しています。このケースでは、より良いフィット感があると思います。 この私のコード:独自のuserRepositoryを使用した.NET Owin認証
public class OAuthServerProvider : OAuthAuthorizationServerProvider
{
IUserAccountService _userAccountService;
public OAuthServerProvider(IUserAccountService userAccountService)
{
_userAccountService = userAccountService;
}
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
}
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
var ipAddress = HttpContext.Current.Request.UserHostAddress;
var userAgent = HttpContext.Current.Request.UserAgent;
var user = await _userAccountService.GetUserByLogin(context.UserName, context.Password, 1, userAgent, ipAddress);
if (user != null && context.UserName == user.email && context.Password == user.password)
{
identity.AddClaim(new Claim(ClaimTypes.Role, "admin"));
identity.AddClaim(new Claim("username", user.email));
identity.AddClaim(new Claim(ClaimTypes.Name, user.firstName));
context.Validated(identity);
}
else
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
}
}
あなたは、私は、ユーザーが私は大丈夫だよ、この部分では、SPを呼び出すために、ストアドプロシージャとDapperのを呼び出すことによって、私のデータベースに存在するかどうかの認証にIUserAccountServiceを使用している見ることができるように。問題は、私は私のStartup.cs
public class Startup
{
internal IUserAccountService _userAccountService;
public void Configuration(IAppBuilder app)
{
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
var oAuthProvider = new OAuthServerProvider(_userAccountService);
OAuthAuthorizationServerOptions options = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/api/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = oAuthProvider
};
app.UseOAuthAuthorizationServer(options);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);
}
}
でこのクラスをインスタンス化する必要があるとき、私は理由IUserAccountServiceのnullオブジェクト参照を取得しますが発生、私は、起動クラスのコンストラクタに注入しようとしたが、それはしません作業。
このプラクティスを実装する方法を知っていますか?