【问题标题】:No authenticationScheme was specified error even when JWT Authentication Specified即使指定了 JWT 身份验证,也没有指定身份验证方案错误
【发布时间】:2020-10-22 03:09:01
【问题描述】:

我是 AzureAD 身份验证的新手。我在 startup.cs 中使用以下设置设置了我的 Web API

        services.AddAuthentication(sharedopt => sharedopt.DefaultScheme = JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer("AzureAd", options =>
        {
            options.Audience = Configuration.GetValue<string>("AzureAd:Audience");
            options.Authority = Configuration.GetValue<string>("AzureAd:Instance")
            + Configuration.GetValue<string>("AzureAd:TenantId");
            options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
            {
                ValidIssuer = Configuration.GetValue<string>("AzureAd:Issuer"),
                ValidAudience = Configuration.GetValue<string>("AzureAd:Audience")
            };

        });

我希望我的客户端应用程序 (Angular) 将在其请求中附加授权标头,因此它将获得对 API 的访问权限

但是当我执行 Web API 并尝试使用 Authorize 打开任何 API 时,它会触发此错误

InvalidOperationException:未指定 authenticationScheme,并且 没有找到 DefaultChallengeScheme。默认方案可以是 使用 AddAuthentication(string defaultScheme) 或 AddAuthentication(Action configureOptions)。

我已经指定了 JWTBearerDefaults.AuthenticationScheme。还是为什么不接受?

【问题讨论】:

    标签: c# asp.net-web-api .net-core jwt azure-active-directory


    【解决方案1】:

    您可能错过了注册 services.ConfigureApiAuthentication(Configuration);在启动类中

    【讨论】:

      【解决方案2】:

      请从 AddJwtBearer 调用中删除第一个“AzureAd”参数。

      TLDR:当您调用 AddAuthentication 时,您将默认方案设置为 JwtBearerDefaults.AuthenticationScheme,即字符串“Bearer”。

      这告诉身份验证中间件对所有请求进行身份验证(除非另有说明,例如通过带有方案的 Authorize 属性)以使用一组由名称“Bearer”组织的处理程序和配置。 但是,您没有注册该方案。您对AddJwtBerer 的调用会注册一个名为“AzureAd”的方案。

      身份验证中间件找不到匹配的方案,因此出现错误。

      如果不指定“AzureAd”参数,则调用以下版本的AddJwtBearer

        builder.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, configureOptions);
      

      如我们所见,它使用与您的默认方案匹配的方案“Bearer”注册 JwtBearer 身份验证。

      【讨论】:

      • 我遇到了同样的问题,这为我解决了。非常感谢。
      猜你喜欢
      • 2020-06-06
      • 2016-08-17
      • 2017-11-29
      • 1970-01-01
      • 2019-07-10
      • 2020-12-02
      • 2021-04-28
      • 2020-04-01
      • 2022-12-10
      相关资源
      最近更新 更多