如何将Asp.Net身份与Azure AD授权结合在一起

时间:2019-04-09 15:40:56

标签: c# asp.net-core asp.net-identity

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

是否可以通过OpenIdConnect将Asp.Net Identity与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 Identity。任何帮助都非常感激

1 个答案:

答案 0 :(得分:0)

我建议使用默认的ASP.NET Identity模板启动项目:

  1. 使用ASP.NET身份(个人用户帐户模板)创建新应用。

  2. 使用迁移Add-Migration NameUpdate-Database种子数据库。

  3. 添加您的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"
        };
    
    });
    

确保对SignInScheme使用IdentityConstants.ExternalScheme,否则身份将无法正确接受外部登录信息。

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