【问题标题】:OIDC together with Asp.net core Identity?OIDC 与 Asp.net 核心身份?
【发布时间】:2021-05-28 02:06:40
【问题描述】:

我有一个 blazor 服务器端应用程序,它已经使用 Asp.net core Identity 启动并运行了一段时间。

我决定添加 OIDC,当使用它作为唯一可行的选项时,但当将两者结合时 - IsAuthenticated 始终为假,我不再收到声明。

我尝试将 DefaultScheme 设置为 IdentityConstants.ApplicationScheme 但没有帮助。

身份设置:

services.AddDefaultIdentity<ApplicationUser>(options =>
        {
            options.SignIn.RequireConfirmedAccount = true;
            options.Password = new PasswordOptions
            {
                RequireDigit = true,
                RequiredLength = 6,
                RequireLowercase = true,
                RequireUppercase = true,
                RequireNonAlphanumeric = true
            };
        })
        .AddRoles<IdentityRole<int>>()
        .AddEntityFrameworkStores<ProjectsContext>();

OIDC 设置:

services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddAuthentication(options => {
            options.DefaultScheme = IdentityConstants.ApplicationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddOpenIdConnect(options => {
            options.ClientId = "myClientId";
            options.ClientSecret = "myClientSecret";
            options.Authority = "https://myAuthority/";
            options.ResponseType = "code";
            options.GetClaimsFromUserInfoEndpoint = true;
            options.TokenValidationParameters.ValidIssuers = new[] {
                options.Authority
            };

            options.CallbackPath = new PathString("/callback");
            options.SignedOutCallbackPath = new PathString("/signout");

            options.Events = new OpenIdConnectEvents()
            {
                OnRedirectToIdentityProvider = context => {
                    context.ProtocolMessage.AcrValues = context.Request.Query["loginmethod"];
                    return Task.FromResult(0);
                }
            };
        });

当我注释掉身份设置块并进行 OIDC 身份验证时 - 我得到了声明和正确的标志。当它包含在内时 - 我没有。

编辑: 当我在 AppOpenIdConnect 选项中添加以下行时,OIDC 登录有效并且我得到了声明。但是,当使用身份登录时,我没有登录并声称...

options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;

【问题讨论】:

    标签: asp.net-identity openid-connect


    【解决方案1】:

    好的,所以对于遇到相同类型问题的任何人,我将发布答案而不是删除问题。 Google 没有帮助我,因为我没有找到任何具有相同设置的人。

    这些是在 AddAuthentication 选项中使用的默认方案,以使 Identity 与 OIDC 一起工作:

    services.AddAuthentication(options => {
                options.DefaultScheme = IdentityConstants.ApplicationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
    

    您还需要在 OpenIdConnectOptions 中添加显式 SignInScheme,如下所示:

    .AddOpenIdConnect(options => {
            options.SignInScheme = IdentityConstants.ApplicationScheme;
            ...
     };)
    

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 2019-03-24
      • 1970-01-01
      • 2017-01-04
      • 2021-02-06
      • 2019-08-05
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多