.net core 中使用 Open Id Connect 和本地数据库的混合身份验证

Gus*_*sos 5 .net azure-active-directory openid-connect .net-core asp.net-core

是否有一种模式可以设计一个能够使用 Open Id Connect(在 Azure AD 中连接)和本地数据库对用户进行身份验证的应用程序?

我正在创建的应用程序的用户来自拥有 Azure Active Directory 的公司,但也有非该公司雇用的用户,这些用户必须使用该应用程序,因为他们未在 Azure AD 中注册。

不使用 Azure AD 的身份验证方法应使用本地数据库,而不是其他身份验证提供程序。

Nan*_* Yu 6

您可以使用 ASP.NET Identity 来管理数据库中的本地用户,并使用 Azure AD 作为外部身份提供程序,使 AAD 帐户能够登录您的应用程序。您可以识别 Azure AD 用户并链接到本地​​数据库中的用户,以便还可以管理与本地用户和 Azure AD 用户的关系/角色。

我将提供一个简单的代码示例来说明如何实现该功能:

  1. 使用 ASP.NET Identity(模板)创建新的 .net core 应用程序Individual User Accounts

  2. 安装包:Microsoft.AspNetCore.Authentication.AzureAD.UI

  3. 修改 Startup.cs 以启用 Azure AD 身份验证:

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>();
    
    services.AddAuthentication(sharedOptions =>
    {
    
    }).AddAzureAD(options => Configuration.Bind("AzureAd", options)).AddCookie();
    
    Run Code Online (Sandbox Code Playgroud)
  4. 修改 appsettings.json 以添加 Azure AD 应用程序设置:

    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "Domain": "xxx.onmicrosoft.com",
        "TenantId": "xxxxxx-xxxxx-4f08-b544-b1eb456f228d",
        "ClientId": "xxxxx-xxxxx-4717-9821-e4f718fbece4",
        "CallbackPath": "/signin-oidc",
        "CookieSchemeName": "Identity.External"
    },
    
    Run Code Online (Sandbox Code Playgroud)

    用户在登录过程中可以选择使用本地用户或AAD用户登录。