身份的方案名称是什么?

What is the scheme name for identity?

假设我使用以下内容:

services.AddIdentity<User, UserRole>()
        .AddEntityFrameworkStores<AppDbContext>();

正在设置的身份验证方案名称是什么?我没有在任何文档中找到这个。我尝试寻找名称为 IdentityAuthenticationDefaultsIdentityDefaults 的 class,但一无所获。我试过 "Cookies" 但没有设置成这个。该应用程序运行良好,因此肯定设置了一些方案名称。

IdentityConstants 就是您在这里寻找的 class。这是您的特定问题的相关部分(已删除 xmldocs):

public class IdentityConstants
{
    private static readonly string CookiePrefix = "Identity";

    public static readonly string ApplicationScheme = CookiePrefix + ".Application";

    ...
}

IdentityConstants.ApplicationScheme 用作 DefaultAuthenticateScheme - 值本身最终为 Identity.Application.

方案设置完毕here

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
    options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
    options.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})

这里是 API 参考文档的链接:

愚蠢的是,IdentityConstants 下有静态字符串引用,但 AuthorizeAttribute class 或方法属性无法使用这些引用来设置 AuthenticationSchemes 属性,因为它必须是常量值。我创建了一个简单的共享常量 class,其中包含解决此问题的必要条件,但希望 MS 提供一些 OOTB。

public class SharedConstants
{
    public const string IdentityApplicationScheme = "Identity.Application";
}

那你就可以这样用了

[Authorize(AuthenticationSchemes = SharedConstants.IdentityApplicationScheme)]