Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 使用.NET Core 2';s AddJwtBearer_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Asp.net core 使用.NET Core 2';s AddJwtBearer

Asp.net core 使用.NET Core 2';s AddJwtBearer,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,使用新的AddJwtBearer时,我无法制作任何样本。我有一个授权的HomeController: [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } 我正在试用新的ASP.NET核心AddJwtBearer,在services.AddMvc()之前的ConfigureServices中有以下代码

使用新的AddJwtBearer时,我无法制作任何样本。我有一个授权的HomeController:

[Authorize]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}
我正在试用新的ASP.NET核心AddJwtBearer,在services.AddMvc()之前的ConfigureServices中有以下代码:

在启动时的Configure方法中,我在app.UseMvc()之前有这个

我希望它重定向到登录页面(没有授权属性),这样我就可以输入用户名和密码,然后创建一个令牌以供后续使用,但我总是被重定向到一个空白页面

我尝试使用postman导航主页/索引,正文为空,标题中有:

WWW-Authenticate →Bearer error="invalid_token", error_description="The token is expired"
若我使用cookie身份验证,它会重定向到登录页面。在以前的版本(UseJwtBeareAuthentication)中,此重定向允许我输入密码并获取令牌


我是在期待错误的行为还是我错过了什么?

我想你是在期待错误的行为。JWT承载令牌主要用于调用API。另一个应用程序调用您的API(例如,HttpClient)以获取重定向作为响应不是很有用。401质询直接告诉调用方他们需要进行身份验证

如果您有使用此API的前端JavaScript,则应在此处添加401状态代码的检查,并从客户端重定向到登录页面

您可以在此处看到源代码:

它设置401状态代码并返回正确的错误


不过,看看代码,我想您也可以使用
OnChallenge
事件从服务器端执行重定向。就我个人而言,我不会使用API重定向到登录页面。

谢谢,好的,据我从您那里了解,我应该根据响应自己重定向。关于你的“JWT承载令牌在调用API时主要使用”的说法,有一个问题:JWT是否也按照我想要的方式使用它们,不是调用API而是从控制器调用操作方法?你的意思是从同一个应用程序调用操作吗?在这种情况下,最好将逻辑移到服务层并调用相同的服务层。如果你指的是另一个应用程序中的一个动作,那么是的,这将是像JWT这样的令牌的典型用例。
app.UseAuthentication();
WWW-Authenticate →Bearer error="invalid_token", error_description="The token is expired"