【问题标题】:Asp .Net Core, Identity Server 4, Check if user is authorized without authorized attributeAsp .Net Core,Identity Server 4,检查用户是否在没有授权属性的情况下获得授权
【发布时间】:2018-12-09 16:34:29
【问题描述】:

这是我的代码,可以正常工作。如果我获得授权,它可以工作,如果没有,它会将我重定向到身份服务器并在重新登录后。

[Authorize]
public async Task<IActionResult> Index()
{                
    return View("../Secure/Index");
}

如果用户未获得授权,我想返回另一个视图并且不将他重定向到身份服务器。我就是这样尝试的。

public async Task<IActionResult> Index()
{                
    if (User == null || User.Identity == null || !User.Identity.IsAuthenticated )
    {
        return View("../Public/Index");
    }

    return View("../Secure/Index");
}

但是它不起作用。 User.Identity.IsAuthenticated 始终为假。即使我之前在身份服务器上并登录过。似乎 [Authorize] 属性正在做一些更可能设置 User.Identity.IsAuthenticated 的事情。

我的问题是,我怎么知道我是没有属性的?

谢谢

【问题讨论】:

  • Authorize 属性触发身份验证处理程序以加载HttpContext.User。要在没有该属性的情况下执行此操作,您可以创建中间件来填充 HttpContext.User 属性,但这会完全违背获得授权的目的。
  • @Brad 谢谢你的回复。你能给我一些例子如何调用身份验证处理程序吗?
  • 为什么不想使用 Authorize 属性?
  • 因为它会自动重定向到身份服务器。我需要我的应用程序有一个 url,用于欢迎页面和实际应用程序。因此,当您未登录时,将显示欢迎页面,当您登录时,将显示应用程序。我有地址192.168.0.100,一旦有欢迎页面。我可以点击它登录。一旦我登录,就会有实际的应用程序。

标签: asp.net-core authorization identityserver4


【解决方案1】:

我花了三天时间弄清楚如何做到这一点并得出结论这不可能。微软的工作真的很棒。

我得到的最接近的是重定向到另一个 网址:https://stackoverflow.com/a/43631950/4909067 但是,.net core 2.1 中的命名当然是不同的。

services.AddAuthentication(options =>
{
    ...
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
    {
        ...
        options.Events = new OpenIdConnectEvents()
        {
            OnRedirectToIdentityProvider = async (context) =>
            {
                Console.WriteLine(  );

                if (context.HttpContext.Request.Path.Value != "/Account/SignInWithOpenId")
                {
                    context.HttpContext.Response.Redirect("/public");
                    context.HandleResponse();
                }

                await Task.CompletedTask;
            },            
        };
        ...
    })

但这不是我想要的。我不想更改网址。我只想在用户登录时提供一些内容,而在用户未登录时提供不同的内容。 在同一个网址上。我应该选择 node js 而不是这个愚蠢的 .net 核心

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2019-07-31
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多