.net core .net内核-添加带有JWT MVC的API后,登录不再工作

.net core .net内核-添加带有JWT MVC的API后,登录不再工作,.net-core,asp.net-core-mvc,asp.net-apicontroller,.net Core,Asp.net Core Mvc,Asp.net Apicontroller,我有一个添加了API的.NETCore2.0应用程序。我正在使用JWT对请求进行身份验证,它工作得很好 回到应用程序的MVC部分后,登录过程似乎不再工作_signInManager.PasswordSignInAsync(…)可以工作,但signInManager.IsSignedIn(用户)(从视图中)为FALSE 这是来自_signInManager.PasswordSignInAsync(…)的结果: ??结果 {成功} IsLockedOut:错误 不允许:错误 RequiresTwoF

我有一个添加了API的.NETCore2.0应用程序。我正在使用JWT对请求进行身份验证,它工作得很好

回到应用程序的MVC部分后,登录过程似乎不再工作_signInManager.PasswordSignInAsync(…)可以工作,但signInManager.IsSignedIn(用户)(从视图中)为FALSE

这是来自_signInManager.PasswordSignInAsync(…)的结果:

??结果 {成功} IsLockedOut:错误 不允许:错误 RequiresTwoFactor:false 成功:对

用户和声明似乎没有正确设置。以下是他们在登录后的样子(视图中的断点):

??User.identifications.First() {System.Security.Claims.ClaimsIdentity} 演员:空 AuthenticationType:null BootstrapContext:null 索赔:计数=0 CustomSerializationData:空 I验证:错误 标签:空 名称:空 NameClaimType:“ RoleClaimType:“

我尝试了另一个(新)用户,但结果相同

此外,如果我尝试连接到一个安全页面,我会得到一个401,但不会重定向到登录页面

我有没有打破我的常规?嗯,不知道去哪里找

更新:这可能是我的问题

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = "Jwt";
            options.DefaultChallengeScheme = "Jwt";
        }).AddJwtBearer("Jwt", options => ... 
我认为这迫使我的非api控制器寻找尚未提供的JWT令牌。我只需要弄清楚如何在同一个应用程序中同时使用COOKIE和JWT

已尝试将此添加到我的api控制器:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme) ]
当我添加这一点时,我会在API请求上返回一个内部服务器错误,这一行也是这样:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme + "," + CookieAuthenticationDefaults.AuthenticationScheme)]

我没有JWT和Cookie认证完全起作用,但我已经克服了这个特殊的问题。。。因此,我将继续回答这个具体问题,然后为下一期打开另一个问题

简短的回答是注释掉ConfigureServices中列出的行

        services.AddAuthentication(options =>
        {
            // options.DefaultAuthenticateScheme = "Jwt";
            //options.DefaultChallengeScheme = "Jwt";
        })      
如果将JWT设置为默认身份验证方案,则会破坏MVC中的cookie方案。一旦我注释掉这些行,登录和cookie认证的其余部分就可以正常工作了

我确实在JWT方面还有一些问题,但我会在另一个问题中解决

我在API控制器中使用它来连接JWT Auth

[Route("API/[controller]/[action]")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]