c# - Web API Bearer token - 我可以使用自定义 token 吗?

标签 c# authentication asp.net-web-api asp.net-identity owin

我正在保护一个 Web API 站点,我想使用 token 。但是,我正在使用旧数据库,其中有一个用户表,每个用户已经为他们创建了一个 token 并存储在表中。

我正在尝试确定是否可以使用 Identity oAuth 不记名 token 身份验证位,但将其全部插入我现有的数据库中,以便

  1. 授予 token 只是从数据库返回该用户的 token
  2. 我可以通过在数据库中查找 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/

相关文章:

c# - JSON 对象创建 PushStreamContent

c# - DevExpress RepositoryItemLookUpEdit

c# - 以编程方式将标签放在 div 或标签中

c# - IdentityServer4 中 token 端点的无效 HTTP 请求

java - 如何将身份验证从 LDAP 更改为 JDBC 以保护我的应用程序

ios - Cognito 身份验证有效但显示错误?

c# - 从 ASP.Net Web Api 获取数据时获取 403 状态

c# - 单击项目时,如何删除包裹 listBox1 中所选项目的蓝色?

javascript - 如何保护 HTTP POST 请求不被批准的 JavaScript 客户端接收?

authentication - 如何使用 ASP.NET 身份在 Web API 2 中实现两因素身份验证?