C# 如何将Asp.Net身份与Azure广告授权相结合

C# 如何将Asp.Net身份与Azure广告授权相结合,c#,asp.net-core,asp.net-identity,C#,Asp.net Core,Asp.net Identity,如何将Asp.Net身份与Azure AD授权集成 是否可以通过OpenIdConnect将Asp.Net身份与Azure AD授权集成?我希望有两个授权提供商,一个用于本地授权(通过standart Asp.net核心标识,另一个通过Azure AD) _services .AddAuthentication(options => { options.DefaultAuthenticateSc

如何将Asp.Net身份与Azure AD授权集成

是否可以通过OpenIdConnect将Asp.Net身份与Azure AD授权集成?我希望有两个授权提供商,一个用于本地授权(通过standart Asp.net核心标识,另一个通过Azure AD)

        _services
            .AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            })
            .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
            {
                options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.ClientId = clientId;
                options.ClientSecret = clientSecret;
                options.Authority = $"{baseAuthorityUrl}/{tenantId}/v2.0";
                options.CallbackPath = new PathString(callBackPath);
                options.Scope.Add("email");
                options.Scope.Add("profile");
                options.ResponseType = "code id_token";

                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    NameClaimType = "name"
                };
            })

这适用于Azure AD授权,但我无法将授权方法从Azure AD更改为ASp.Net标识。非常感谢您提供的任何帮助

我建议使用默认的ASp.Net标识模板启动项目:

  • 使用ASP.NET标识(个人用户帐户模板)创建新的应用程序

  • 为数据库添加迁移种子
    添加迁移名称
    更新数据库

  • 添加您的OIDC提供程序:

    services
    .AddAuthentication(options =>
    {
        options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    
    }).AddCookie()
    .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
    {
    
        options.SignInScheme = IdentityConstants.ExternalScheme;
    
        options.ClientId = ClientId;
        options.ClientSecret = ClientSecret;
        options.Authority = $"{baseAuthorityUrl}/{tenantId}/v2.0";
        options.CallbackPath = new PathString("/signin-oidc");
        options.Scope.Add("email");
        options.Scope.Add("profile");
        options.ResponseType = "code id_token";
    
        options.SaveTokens = true;
        options.GetClaimsFromUserInfoEndpoint = true;
    
        options.TokenValidationParameters = new TokenValidationParameters
        {
            NameClaimType = "name"
        };
    
    });
    
  • 确保使用
    IdentityConstants.ExternalScheme
    进行登录,否则该标识将无法正确接受外部登录信息

    Asp.net将创建一个与您的外部帐户关联的本地帐户,以便您可以使用本地标识系统执行授权