小编GPW*_*GPW的帖子

使用JWT的.Net Core 2.0 Web API - 添加标识会破坏JWT身份验证

(编辑 - 找到正确的解决方案!见下文)

好的 - 这是我第一次尝试使用.Net Core 2.0和身份验证,虽然我过去曾使用过Web API 2.0,并且在过去几年中对各种MVC和Webforms ASP项目进行了相当广泛的工作.

我正在尝试使用.Net Core创建一个仅限Web API的项目.这将形成多租户应用程序的后端以生成一些报告,因此我需要能够对用户进行身份验证.通常的方法是使用JWT - 首先验证用户生成令牌,然后将其传递给客户端以在每个API请求上使用.将使用EF Core存储和检索数据.

我按照这篇文章找到了这个设置的基本方法,我设法让它工作正常 - 我有一个接受用户名/密码的控制器并返回一个令牌(如果有效),并且一些授权策略设置基于索赔.

我需要的下一件事是实际管理用户/密码/等.我以为我只是使用.Net核心身份,因为我会有很多现成的代码来担心用户/角色,密码等.我使用的是自定义User类和UserRole派生自标准IdentityUserIdentityRole类的类,但我现在已经恢复到标准的那个.

我遇到的问题是我无法弄清楚如何添加身份并注册所有各种服务(rolemanager,usermanager等)而不会破坏身份验证 - 基本上只要我将此行添加到我的Startup.ConfigureServices类中:

services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<MyContext>();
Run Code Online (Sandbox Code Playgroud)

这一切都出错了,当我收到请求时,我再也看不到任何索赔,所以所有的政策都锁定了,你无法得到任何东西.

如果我没有那些行,那么我最终会遇到与UserManager,RoleManager,UserStore等相关的错误.所有这些都没有注册DI.

那么......如何(如果可能的话)我可以注册身份并正确地将其连接到上下文,但是避免/删除对实际授权机制的任何更改?

我已经在网上看了很多,但是自从.Net Core 1.x以来已经发生了很多变化,所以很多教程等都不再有效了.

我不打算让这个API应用程序拥有任何前端代码,因此我现在不需要对表单或任何内容进行任何cookie身份验证.

编辑
确定,我现在发现在此代码中设置Startup.ConfigureServices()方法中的JWT身份验证:

 services.AddAuthentication(
            JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                 >>breakpoint>>>   options.TokenValidationParameters =
                        new TokenValidationParameters
                        {
                            ValidateIssuer = true,
                            ValidateAudience = true,
                            ValidateLifetime = true,
                            ValidateIssuerSigningKey = true,

                            ValidIssuer = "Blah.Blah.Bearer",
                            ValidAudience = "Blah.Blah.Bearer",
                            IssuerSigningKey …
Run Code Online (Sandbox Code Playgroud)

jwt asp.net-identity-2 asp.net-core-webapi

18
推荐指数
1
解决办法
5454
查看次数