ASP. NET Core 3.1 не авторизует токен на предъявителя - PullRequest
1 голос
/ 29 марта 2020

Я добавил аннотацию [Authorize(Roles="CompanyRole")] к своему действию контроллера, и в классе Startup у меня есть:

app.Use(async (context, next) =>
        {
            if(context.Session.GetString("user") != null)
            {
                var tk = JsonConvert.DeserializeObject<UserModel>(context.Session.GetString("user"));
                if (!String.IsNullOrEmpty(tk.Token))
                {
                    context.Request.Headers.Add("Authorization", "Bearer " + tk.Token);
                }
                await next.Invoke();
            }
            else
            {
                context.Request.Path = "/Home/Login";
                await next.Invoke();
            }
        });

Если я удалю атрибут Authorize, я смогу получить пользовательская информация и все претензии, использующие

 var A = User.Identity.Name;

И одна из ролей - CompanyRole, но я получаю «Несанкционированный», когда пытаюсь выполнить это действие контроллера.

1 Ответ

1 голос
/ 29 марта 2020

Вы должны учитывать приоритет промежуточного ПО и зарегистрировать свой до авторизации промежуточного ПО в файле Startup.cs.

app.Use(async (context, next) =>
    {
        if(context.Session.GetString("user") != null)
        {
            var tk = JsonConvert.DeserializeObject<UserModel>(context.Session.GetString("user"));
            if (!String.IsNullOrEmpty(tk.Token))
            {
                context.Request.Headers.Add("Authorization", "Bearer " + tk.Token);
            }
            await next.Invoke();
        }
        else
        {
            context.Request.Path = "/Home/Login";
            await next.Invoke();
        }

    });
app.UseAuthorization();
...