如何让 mvc 管道在 .net core 5 中验证 oidc

How to get mvc pipeline to authenticate oidc in .net core 5

我正在尝试找出一种让 mvc 对 AzureAD oidc 令牌进行身份验证的方法。我的应用程序只是后端,没有登录或退出。所以我想从 OnAuthorizationAsync(**AuthorizationFilterContext** context) 获取用户声明,但它在 httpcontext 中总是 return 为空。我认为这可能是 AddOpenIdConnect 中的某种配置问题。以下是我在ConfigureServices中的设置。需要做些什么才能获得更多的用户索赔?

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme
        //    options =>
        //{
        //    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        //    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; //AuthorizationConstants.AuthenticationSchemes.Oidc
        //} //behave the same with or without this setting
        )
        .AddOpenIdConnect("oidc", options =>
        {
            options.ClientId = azureAdConfig.ClientId;
            options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(azureAdConfig.EntryUrl, new OpenIdConnectConfigurationRetriever());
        });



 Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // routing and other things
        app.UseAuthentication();
        app.UseAuthorization();
    }

你的东西根本不起作用。 OpenIDConnect 仅处理身份验证部分,但收到的令牌只是在您的设置中丢失。您遇到的第二个问题是您没有将 JwtBearer 与 AddOpenIdConnect 混合使用。 JwtBearer 用于从客户端接收访问令牌的 API。

您需要配置的适当框架是:

services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
}).AddCookie(opt =>
{
}).AddOpenIdConnect(options =>
{
});

您应该将 OpenIDConnectHandler 与 Cookie 处理程序结合起来。然后就可以了

有关详细信息,请参阅本文: How do I implement Blazor authentication with OpenID Connect?