我有一个 ASP.NET Web API 应用程序,我正在尝试使我的 API 调用安全且仅对注册用户可用。
我知道注册用户可以通过调用 /Token 并发送用户名和密码以及 grant_type 以及请求来获取访问令牌。
我了解这一切都是因为Startup.Auth.cs
文件App_start
夹中的文件内有以下配置:
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
通常使用用户名和密码调用 /Token 会搜索默认用户表,如果该用户存在,则它将访问令牌发送给用户。
但是在我的项目中,我有自己的方法/表来注册用户并将它们存储在数据库中。所以我没有使用 ASP.NET Identity 提供的默认用户表。
问题:
我是否有可能以某种方式覆盖/更改对 /Token 的请求的处理方式?所以在那里我可以通过我自己的自定义用户表检查用户名/密码,然后在一切正常的情况下发送访问令牌。
编辑:
我想了一个办法,但我真的怀疑这应该是要走的路。在我自己注册用户的自定义方法中,当一切正常时,我可以调用
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
// Return error
}
// Return success
现在我的用户也在 ASP.NET 用户表中,随后对 /Token 的调用应该将他们识别为注册用户。但我想现在我已经在两个表中复制了我的用户。有什么干净的方法可以实现我想要的吗?