【问题标题】:Token Based Authentication using ASP.NET 5 and Identity vs custom user database使用 ASP.NET 5 和身份与自定义用户数据库的基于令牌的身份验证
【发布时间】:2016-04-09 08:52:02
【问题描述】:

我有一个现有的 ASP.NET 4 项目,该项目由一个 Web api 和一个使用该 api 的单页应用程序组成。我已经完成了这里描述的 jwt 实现 http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/ ,但是令我非常失望的是,这并不容易移植到 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);

所以我可以使用 [Authorize] 甚至声明来保护我的 web api 路由。

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

“ASP,NET 5 中的身份验证/授权与此版本确实不同,直到现在您无法颁发访问令牌,您可以直接使用它们,您需要中继身份提供者来完成此任务。所以如果不使用外部身份提供程序,则无法直接将此项目升级到最新的 ASP.NET 5。"

我想我希望帮助找出如何以正确的方式将该示例移植到 ASP.NET 5。

【问题讨论】:

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


    【解决方案1】:

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

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

    配置服务:

    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&lt;ApplicationUser, Application, ApplicationRole, string&gt; 派生。

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

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 当我尝试运行它时,我从程序集 'Microsoft.AspNet.Hosting,Version=1.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60' 中得到了类型为 'WrappedApplicationEnvironment' 的“方法 'get_Configuration'没有实施。” - 另外,我看不到我要在代码中的哪个位置添加额外的身份声明?
      • 你可能还在使用 rc1 而不是 rc2?
      • 此示例应与 v1.0.0-rc2-16216 对齐。所以它可能不再适用于 rc1-update1。您可能会从myget.org/gallery/aspnetvnext 获得每晚构建。
      • 如果您链接到的示例确实包含我正在寻找的一切,我会尝试每晚。但是,正如我之前提到的,我看不到我应该在哪里为身份添加额外的声明。此外,逻辑将在哪里从 json 中发送的用户名/密码输入到 /token 端点、数据库查找等对用户进行身份验证?我见过的最接近的东西是github.com/mrsheepuk/ASPNETSelfCreatedTokenAuthExample,那肯定还没有准备好生产
      • 嗯。也许这个回购可以提供一些启示。 github.com/leastprivilege/AspNet5TemplateCookieAuthentication/…
      猜你喜欢
      • 2011-03-18
      • 2017-03-10
      • 2017-09-13
      • 2016-06-09
      • 2021-11-13
      • 1970-01-01
      • 2014-03-26
      • 2023-04-10
      • 2017-05-19
      相关资源
      最近更新 更多