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