是否有一种模式可以设计一个能够使用Open Id Connect(在Azure AD中连接)和本地数据库对用户进行身份验证的应用程序?
我正在创建的应用程序将拥有来自具有Azure Active Directory的公司的用户,但也有未被该公司雇用的用户必须使用该应用程序,因为他们未在Azure AD中注册。
没有Azure AD的身份验证方法应使用本地数据库,而不是其他身份验证提供程序。
您可以使用ASP.NET Identity管理数据库中的本地用户,并使用Azure AD作为外部身份提供程序,使AAD帐户能够在您的应用程序中登录。您可以识别Azure AD用户并链接到本地数据库中的用户,以便您还可以管理与本地用户和Azure AD用户的关系/角色。
我将提供一个简单的代码示例来说明如何实现该功能:
Individual User Accounts
模板)创建新的.net核心应用程序。services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddAuthentication(sharedOptions =>
{
}).AddAzureAD(options => Configuration.Bind("AzureAd", options)).AddCookie();
"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用户登录。您可以使用IdentityServer作为“联合网关”,它接受各种身份验证方法(Azure AD,本地用户等),并将它们公开为单个统一的OpenID Connect服务器。这使得将新应用程序集成到您的环境中变得容易,因为它们具有用户和单个端点的单一视图,并且“网关”可以单独负责处理认证方法和协议。
有关模式的详细信息,请参阅此页面:
http://docs.identityserver.io/en/latest/topics/federation_gateway.html