将Open ID Connect与服务器端Blazor结合使用

时间:2019-06-13 12:36:46

标签: asp.net-core blazor

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

使用最新的.NET Core版本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;
        });

        app.UseAuthentication();

如何告知应用程序,如果我没有登录,我想重定向到Identity Server?

编辑:Codevisions的答案是一种解决方法。我发现了计划用于.NET Core 3.0 Preview 7的待解决的github问题herehere,可能会正式解决此问题。

2 个答案:

答案 0 :(得分:1)

添加到下面的ConfigureServices代码中。

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

答案 1 :(得分:0)

下面的代码片段演示了如何使用Authorize属性在Web API中注释数据控制器,以重定向未经身份验证的用户登录(也许是Identity Server)。

[Authorize(AuthenticationSchemes = OpenIdConnectDefaults.AuthenticationScheme)] 
[Route("api/[controller]")]
    public class SampleDataController : Controller
    {
    // ..
    }

注意:Startup类中需要适当的配置

注意:如果您使用服务而不是Web API,则建议您放弃前者并使用后者。

注意:我不知道@attribute指令,但是为什么不尝试一下并告诉我们它是否对您有用...

@attribute [Authorize(AuthenticationSchemes = OpenIdConnectDefaults.AuthenticationScheme)] 

稍后,我将尝试添加更多信息,但运行您的应用并询问有关您所面临问题的问题...

希望这对您有帮助...