OpenIddict ASP.NET Core 服务器不能用作默认方案处理程序

2024-02-22

我想OpenIddict 3.0 https://github.com/openiddict/openiddict-core。我按照文档中的步骤操作,创建了一个授权控制器,并添加了一个测试应用程序。当我尝试运行时,出现以下异常:

OpenIddict ASP.NET Core 服务器不能用作默认服务器 方案处理程序。确保 DefaultAuthenticateScheme、 默认挑战方案、默认禁止方案、默认登录方案、 DefaultSignOutScheme 和 DefaultScheme 都指向 OpenIddict ASP.NET Core 服务器处理程序

我找不到我做错了什么。

这是我的Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
    {
        // Configure the context to use Microsoft SQL Server.
        options.UseInMemoryDatabase("Identity");

        // Register the entity sets needed by OpenIddict.
        // Note: use the generic overload if you need
        // to replace the default OpenIddict entities.
        options.UseOpenIddict<Guid>();
    });

    AddIdentityCoreServices(services);

    services.AddOpenIddict()

            // Register the OpenIddict core components.
            .AddCore(options =>
            {
                // Configure OpenIddict to use the Entity Framework Core stores and models.
                options.UseEntityFrameworkCore()
                        .UseDbContext<ApplicationDbContext>()
                        .ReplaceDefaultEntities<Guid>();
            })

            // Register the OpenIddict server components.
            .AddServer(options =>
            {
                // Enable the token endpoint (required to use the password flow).
                options.SetTokenEndpointUris("/connect/token");

                // Allow client applications to use the grant_type=password flow.
                options.AllowPasswordFlow();

                // Mark the "email", "profile" and "roles" scopes as supported scopes.
                //options.RegisterScopes(OpenIddictConstants.Scopes.Email,
                //                       OpenIddictConstants.Scopes.Profile,
                //                       OpenIddictConstants.Scopes.Roles);

                // Accept requests sent by unknown clients (i.e that don't send a client_id).
                // When this option is not used, a client registration must be
                // created for each client using IOpenIddictApplicationManager.
                options.AcceptAnonymousClients();

                // Register the signing and encryption credentials.
                options.AddDevelopmentEncryptionCertificate()
                        .AddDevelopmentSigningCertificate();

                // Register the ASP.NET Core host and configure the ASP.NET Core-specific options.
                options.UseAspNetCore()
                        .EnableAuthorizationEndpointPassthrough() // Add this line.
                        .EnableTokenEndpointPassthrough()
                        .DisableTransportSecurityRequirement(); // During development, you can disable the HTTPS requirement.
            })

            // Register the OpenIddict validation components.
            .AddValidation(options =>
            {
                // Import the configuration from the local OpenIddict server instance.
                options.UseLocalServer();

                // Register the ASP.NET Core host.
                options.UseAspNetCore();
            });

    // ASP.NET Core Identity should use the same claim names as OpenIddict
    services.Configure<IdentityOptions>(options =>
    {
        options.ClaimsIdentity.UserNameClaimType = OpenIdConnectConstants.Claims.Name;
        options.ClaimsIdentity.UserIdClaimType = OpenIdConnectConstants.Claims.Subject;
        options.ClaimsIdentity.RoleClaimType = OpenIdConnectConstants.Claims.Role;
    });

    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = OpenIddictServerAspNetCoreDefaults.AuthenticationScheme;
    });

    services.AddControllers();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

private static void AddIdentityCoreServices(IServiceCollection services)
{
    var builder = services.AddIdentityCore<ApplicationUser>();
    builder = new IdentityBuilder(
        builder.UserType,
        typeof(ApplicationRole),
        builder.Services);

    builder.AddRoles<ApplicationRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders()
        .AddSignInManager<SignInManager<ApplicationUser>>();
}

请帮助我解决我做错的事情。


我终于知道我错在哪里了。 @Train https://stackoverflow.com/users/4123372/train感谢您为我指明了正确的方向。

改变services.AddAuthentication(...) from

services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = OpenIddictServerAspNetCoreDefaults.AuthenticationScheme;
    });

to

services.AddAuthentication(options =>
            {
                options.DefaultScheme = OpenIddict.Validation.AspNetCore.OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme;
            });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenIddict ASP.NET Core 服务器不能用作默认方案处理程序 的相关文章

随机推荐

  • 在不知道键的情况下解析 json

    我试图在不知道 json 格式的键和结构的情况下解析 java 中的 json 并将该数据保存到 hashmap 中 我如何循环遍历整个 json 格式并将键和值存储到 hashmap 中 id 12345 value 123 person
  • 原始“null”和 Java 8

    我知道处理的最佳实践null原语是使用盒装包装器 例如Integer代替int 正如这里所讨论的 原始数据类型为 Null https stackoverflow com questions 11047276 null for primit
  • dartlang 和 dartdap 库以及与活动目录的连接

    我一直在为 Dart 寻找一个好的 ldap 库来连接 Microsoft Active Directory 我找到了 dartdap 但我似乎无法让它工作 我 100 确信我的 CN 和密码是正确的 因为我可以使用 lpap 浏览器连接到
  • 剪切 HTML 标签并再次包装 HTML 标签第 1 部分 [重复]

    这个问题在这里已经有答案了 我尝试转换以下字符串 p string b bold em italic string em also bold b p 到这个字符串 p string p b bold b em italic string e
  • Parse 中的主要错误:[PFUser currentUser] 死锁

    Parse 社区已多次提出通过解析后台调用因线程争用而导致 PFUser 死锁的问题 但 Parse 选择不处理框架中的这个巨大错误 有谁知道这个问题的解决方法 关于此问题的其他明显报告 https developers facebook
  • 如何在android中将数据库文件附加到电子邮件中?

    您好 我正在尝试通过附加数据库发送电子邮件 我收到邮件 但没有附加以下是我的代码 谁能帮我 尝试 String host smtp gmail com String from email protected cdn cgi l email
  • 如何在 JavaFX 中的 TextField 中强制进行双输入?

    如何确保用户仅输入双精度值在给定的文本字段中 我找到了一个整数的解 https stackoverflow com questions 7555564 what is the recommended way to make a numeri
  • django 查询集中的两个或多个 __in 过滤器

    我有这个查询 query select from products where productnr supplier id in s product list 其中 Product list 如下所示 OB520 3 RH402 20 我如
  • 谷歌地图建筑风格

    有什么方法可以像 openlayer 那样在 google 地图中设置建筑物的样式吗 http workshops opengeo org openlayers intro vector style html http workshops
  • 无法使用传入消息调用侦听器方法,并且 ConsumerRecord 的 Backoff 未耗尽

    下面是我的 kafka 侦听器的方法定义 如果有效负载接收到 null 或空字符串 我想我会遇到以下错误 您能帮忙吗 KafkaListener topics kafka consumer topic name reservation gr
  • URL 重写包括尾部斜杠(如果不存在)

    我有这个RewriteRule上班 RewriteBase my path RewriteCond REQUEST FILENAME f RewriteCond REQUEST FILENAME d RewriteRule my path
  • 可以将 NSManagedObject 移动到另一个 NSManagedContext 吗?

    我有两个 NSManagedContext 一个父级和一个子级 用于并发 指定如下 self managedObjectContext NSManagedObjectContext alloc initWithConcurrencyType
  • Schema.org 开放时间

    我正在尝试为 openinghours 创建 schema org 定义 该定义在 Google 的丰富摘要测试工具中进行验证 通过此标记 我想定义商店每周一的营业时间为 11 00 22 00
  • AngularJS:非标准属性上的 ng-src 行为?

    我正在使用 在我的应用程序中集成媒体播放器适合所有人的视频 http v4e thewikies com 生成器 如果浏览器不支持 HTML5 播放器会回退到 Flashvideo and audio我必须建立一个object元素与para
  • 计算xml文件中元素的数量

    首先我参考了这篇文章如何获取 XML 或 XElement 变量中的特定元素计数 https stackoverflow com questions 8764510 how to get specific element count in
  • 选择框内的 HTML

    我想知道是否可以将一个项目分成选择框中的两行 我的选择框的值之一是两个长以适合我的 div 不 这是不可能的 您可以考虑使用 javascript 小部件 例如this http sharebrain info brainpicks scr
  • 关闭mysql不安全语句警告

    我正在使用日志错误将警告 错误写入文件 当我执行 INSERT IGNORE SELECT 语句时 它只是继续写入此警告消息 120905 3 01 23 Warning Unsafe statement written to the bi
  • Vim 中的智能换行

    我一直想知道 Vim 是否有能力智能换行代码 以便它保持与缩进的行相同的缩进 我在其他一些文本编辑器 例如电子文本编辑器 上注意到了它 并发现它可以帮助我更轻松地理解我正在查看的内容 例如而不是 p a href http www exam
  • 将多个 CSV 文件导入 pandas 并连接成一个 DataFrame

    我想将目录中的多个 CSV 文件读取到 pandas 中 并将它们连接到一个大的 DataFrame 中 但我还是没能弄清楚 这是我到目前为止所拥有的 import glob import pandas as pd Get data fil
  • OpenIddict ASP.NET Core 服务器不能用作默认方案处理程序

    我想OpenIddict 3 0 https github com openiddict openiddict core 我按照文档中的步骤操作 创建了一个授权控制器 并添加了一个测试应用程序 当我尝试运行时 出现以下异常 OpenIddi