.NET Core 2.0中的多租户授权:如何实现

时间:2018-02-15 18:34:37

标签: .net authentication authorization identity asp.net-core-2.0

我想在.NET Core中设置多租户。基本思路是:

  • 将JWT用于API
  • 允许用户使用Azure AD,Google,Facebook等服务登录
  • 利用标识允许用户使用网站帐户登录

任何使用第三方提供商(Azure AD,Google等)登录的用户都需要首次“注册”。然后,他们的Google帐户将与用户帐户相关联。 JWT令牌也将映射到具有特定权限的用户帐户。

我的初衷是尝试做这样的事情:

services.AddAuthentication(sharedOptions =>
{
   sharedOptions.DefaultScheme  =cookieAuthenticationDefaults.AuthenticationScheme;
                sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddGoogle(optoins =>  Configuration.Bind("Google", options)) 
            .AddAzureAd(options => Configuration.Bind("AzureAd", options))
            .AddCookie();

现在的问题是,我现在有多个challenenge和身份验证方案,所以我的计划是删除默认方案,并为用户提供一种选择他们想要使用的方案的方法。

我所做的是子类AuthenticationService并覆盖AuthenticateAsyncChallengeAsyncSignInAsync。 Authenticate和Challenege将重定向到用户将选择其身份验证首选项的页面。然后将他们的选择存储在cookie中,并用于后续调用Authenticate和Challenege。到目前为止,情况正在发生,除非现在SignInAsync运行时没有注册的处理程序。

在这个阶段,我想知道我解决问题的方法是否正确:看起来创业公司应该注册我需要的处理程序。我确信有一种方法可以根据用户的选择注册处理程序,但我想知道这是否正确。

1 个答案:

答案 0 :(得分:0)

通过阅读Microsoft的身份文档后,似乎为了让他们的示例按照书面形式工作,需要使用身份。对AddIdentityAddDefaultTokenProviders的调用配置默认以下代码将根据我的要求或多或少执行(除了JWT)

 //configure identity
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

            //configure other providers
            var authSection = Configuration.GetSection("Authentication");

             var authBuilder=services.AddAuthentication()
            .AddGoogle(options =>  authSection.Bind("GooglePlus", options))
            .AddAzureAd(options => authSection.Bind("AzureAd", options));

以下是文档的说法:

注意:AddIdentity的调用会配置默认方案设置。 AddAuthentication(string defaultScheme)重载设置DefaultScheme属性;并且,AddAuthentication(Action<AuthenticationOptions> configureOptions)重载仅设置您明确设置的属性。添加多个身份验证提供程序时,只应调用一次这些重载。对它的后续调用可能会覆盖以前配置的任何AuthenticationOptions属性。