带有Open Id Connect和本地数据库的.net核心中的混合身份验证

时间:2019-02-25 22:06:30

标签: .net asp.net-core .net-core azure-active-directory openid-connect

是否存在一种模式来设计一个能够同时通过Open Id Connect(在Azure AD中连接)和本地数据库对用户进行身份验证的应用?

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

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

2 个答案:

答案 0 :(得分:0)

您可以将IdentityServer用作“联合网关”,该网关采用多种身份验证方法(Azure AD,本地用户等),并将它们公开为单个统一的OpenID Connect服务器。这使新应用程序轻松集成到您的环境中,因为它们具有用户的单个视图和单个端点,并且“网关”完全可以负责认证方法和协议的争用。

有关此模式的详细信息,请参见此页面:

http://docs.identityserver.io/en/latest/topics/federation_gateway.html

enter image description here

答案 1 :(得分:0)

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

我将提供有关如何实现该功能的简单代码示例:

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

  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();
    
  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"
    },
    

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