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 使用开放ID连接服务器端Blazor_Asp.net Core_Blazor - Fatal编程技术网

Asp.net core 使用开放ID连接服务器端Blazor

Asp.net core 使用开放ID连接服务器端Blazor,asp.net-core,blazor,Asp.net Core,Blazor,我想在我的服务器端Blazor应用程序中使用Open ID Connect with Identity Server 4进行授权。我在MVC应用程序中也有同样的设置 使用最新的.NET核心版本3.0 Preview 6,可以将属性´@attribute[Authorize]´添加到站点。但是,如果我没有获得授权,我不会被重定向到Identity Server登录,因为我是从MVC应用程序使用的。相反,该站点只显示消息“未授权” 在Startup.cs中,我有以下设置: servi

我想在我的服务器端Blazor应用程序中使用Open ID Connect with Identity Server 4进行授权。我在MVC应用程序中也有同样的设置

使用最新的.NET核心版本3.0 Preview 6,可以将属性´@attribute[Authorize]´添加到站点。但是,如果我没有获得授权,我不会被重定向到Identity Server登录,因为我是从MVC应用程序使用的。相反,该站点只显示消息“未授权”

在Startup.cs中,我有以下设置:

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = "Cookies";
            options.DefaultChallengeScheme = "oidc";
        })
        .AddCookie("Cookies")
        .AddOpenIdConnect("oidc", options =>
        {
            options.Authority = "http://localhost:5000";
            options.RequireHttpsMetadata = false;

            options.ClientId = "myClient";
            options.SaveTokens = true;
        });

如果我没有登录,如何告诉应用程序我希望被重定向到Identity Server


编辑:Codevisions answer作为一种解决方法。我发现了尚未解决的github问题,并计划在.NET Core 3.0预览版7中正式发布。添加到下面的
ConfigureServices
code

services.AddMvcCore(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});

服务器端Blazor a.k.a Razor组件不需要控制器,因为客户端和服务器通过信号器进行通信。我必须为此创建一个虚拟控制器。我同意你的看法。这似乎不明显,但不需要实际控制员。我设法将其简化为添加AddMvcCore而不是AddcontrollersWithView。我的回复是基于MS创建的示例,它实际上是有效的。你是对的,我最终让它以这种方式工作。我仍然不喜欢这样的事实,我必须包括MVC,但我想这是唯一的方式,直到他们提供一个正式的解决方案。谢谢你的帮助!
services.AddMvcCore(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});