我正在保护一个 Web API 站点,我想使用 token 。但是,我正在使用旧数据库,其中有一个用户表,每个用户已经为他们创建了一个 token 并存储在表中。
我正在尝试确定是否可以使用 Identity oAuth 不记名 token 身份验证位,但将其全部插入我现有的数据库中,以便
- 授予 token 只是从数据库返回该用户的 token
- 我可以通过在数据库中查找 token 并创建用户身份来验证 token (我在站点的其他地方使用 ASP.NET Identity 来处理 MVC 方面的事情)
我不知道这是否可行,或者我是否应该放弃并使用标准的 HTTP 处理程序方法。到目前为止,这是我相当标准的代码,它只发布标准 token ,而不是我想要使用的现有 token 。
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
// Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
var bearerAuth = new OAuthBearerAuthenticationOptions()
{
Provider = new OAuthBearerAuthenticationProvider()
};
app.UseOAuthBearerAuthentication(bearerAuth);
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
}
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
var manager = new UserManager<User, long>(new UserStore(new UserRepository()));
var user = await manager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
}
else
{
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("name",user.Email));
context.Validated(identity);
}
}
}
最佳答案
回答我自己的问题;)
是的,这是可能的。它主要需要您整理出一个自定义 token 提供程序并在其中实现您的逻辑。一个很好的例子:
https://github.com/eashi/Samples/blob/master/OAuthSample/OAuthSample/App_Start/Startup.Auth.cs
关于c# - Web API Bearer token - 我可以使用自定义 token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403258/