使用ASP.NET 5和Identity与自定义用户数据库进行基于令牌的身份验证

时间:2016-01-05 13:46:53

标签: asp.net asp.net-core-mvc

我有一个现有的ASP.NET 4项目,包含一个web api和一个单页应用程序,它正在使用api。我已经完成了像http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/这样描述的jwt实现,但令我非常失望的是,移植到ASP.NET 5和MVC 6并不是那么容易。我需要能够拥有自己的SimpleAuthorizationServerProvider类(或等效的),因为我正在授权我的用户使用我的本地数据库。

在SimpleauthorizationServerProvider中,我是:

  1. 在我的本地用户数据库中查找上下文的用户名和密码,返回错误或继续
  2. 创建var identity = new ClaimsIdentity(context.Options.AuthenticationType);
  3. 添加声明 - 例如。 identity.AddClaim(new Claim(“sub”,context.UserName));,也设置角色,例如。 identity.AddClaim(new Claim(ClaimTypes.Role,role));
  4. 最后,context.Validated(identity);
  5. 所以我可以使用[授权]甚至声称保护我的网络API路线。

    我已经做了很多谷歌搜索,但我似乎无法找到有关如何实现这一目标的足够信息。正如上面链接的文章的作者所说:

    “ASP,NET 5中的身份验证/授权与此版本完全不同,直到现在您无法发出访问令牌,您可以只使用它们,您需要在身份提供程序上中继此任务。所以没有直接的方法可以在不使用外部身份提供程序的情况下将此项目升级到最新的ASP.NET 5.“

    我想我想要的是帮助弄清楚如何将这个示例移植到ASP.NET 5,正确的方法。

2 个答案:

答案 0 :(得分:1)

查看OpenIddict - 我认为可以满足您的需求。

这几乎是我需要的所有配置:

<强> ConfigureServices:

services.AddIdentity<ApplicationUser, ApplicationRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders()
            .AddOpenIddictCore<Application>(config => config.UseEntityFramework()); //added this line

<强>配置

app.UseOpenIddictCore(builder =>
{
    // tell openiddict you're wanting to use jwt tokens
    builder.Options.UseJwtTokens();
    // NOTE: for dev consumption only! for live, this is not encouraged!
    builder.Options.AllowInsecureHttp = true;
    builder.Options.ApplicationCanDisplayErrors = true;
});

// use jwt bearer authentication
app.UseJwtBearerAuthentication(options =>
{
    options.AutomaticAuthenticate = true;
    options.AutomaticChallenge = true;
    options.RequireHttpsMetadata = false;
    // these urls must match the value in the payload posted from the client side during login
    options.Audience = "http://localhost:58292/";
    options.Authority = "http://localhost:58292/";
});

还有一两件小事,例如您的DbContext需要从OpenIddictContext<ApplicationUser, Application, ApplicationRole, string>派生。

您可以在此博客文章中看到完整的解释(包括指向github repo的链接): http://capesean.co.za/blog/asp-net-5-jwt-tokens/

答案 1 :(得分:0)