是否存在一种模式来设计一个能够同时通过Open Id Connect(在Azure AD中连接)和本地数据库对用户进行身份验证的应用?
我正在创建的应用程序将有一家拥有Azure Active Directory的公司的用户,但该公司没有雇用该用户的用户,这些用户必须使用该应用程序,因为他们没有在Azure AD中注册。
没有Azure AD的身份验证方法应使用本地数据库,而不是其他身份验证提供程序。
答案 0 :(得分:0)
您可以将IdentityServer用作“联合网关”,该网关采用多种身份验证方法(Azure AD,本地用户等),并将它们公开为单个统一的OpenID Connect服务器。这使新应用程序轻松集成到您的环境中,因为它们具有用户的单个视图和单个端点,并且“网关”完全可以负责认证方法和协议的争用。
有关此模式的详细信息,请参见此页面:
http://docs.identityserver.io/en/latest/topics/federation_gateway.html
答案 1 :(得分:0)
您可以使用ASP.NET Identity来管理数据库中的本地用户,还可以使用Azure AD作为外部身份提供程序,从而使AAD帐户可以登录到您的应用程序中。您可以标识Azure AD用户并链接到本地数据库中的用户,以便还可以管理与本地用户和Azure AD用户的关系/角色。
我将提供有关如何实现该功能的简单代码示例:
使用ASP.NET Identity(Individual User Accounts
模板)创建新的.net核心应用程序。
安装软件包:Microsoft.AspNetCore.Authentication.AzureAD.UI
修改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();
修改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用户登录。