c# - 在 DbContext 中使用 Azure B2C 在 ASP.NET Core 上实现多租户
问题描述
我有一个 .NET Core 3.1 Web API 应用程序,它根据用户来自哪个组织连接到不同的数据库。该组织在 Azure AD B2C 中的用户帐户中存储为字符串值,在执行请求时,我需要识别该用户的组织并根据其组织选择正确的连接字符串。
但是,我无法在我的 DbContext 中获取用户的“userId”。我尝试了两种不同的实现,但都没有工作。
在我的 Startup.cs 文件的“ConfigureServices”方法中,我指定了以下内容:
... services.AddHttpContextAccessor(); services.AddTransient<IUserRepository, UserRepository>();
然后我用它的服务声明了接口:
public interface IUserRepository { public void LogCurrentUser(); } public class UserRepository : IUserRepository { private readonly IHttpContextAccessor _httpContextAccessor; public UserRepository(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public void LogCurrentUser() { var username = _httpContextAccessor.HttpContext.User.Identity.Name; } }
3)最后,在我的 DbContext 上,我尝试从声明中提取 userId:
public class ApplicationDbContext : DbContext
{
private readonly ApplicationTenantClient _tenant;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options,
ITenantService tenantProvider,
IUserRepository userRepository,
IHttpContextAccessor httpContextAccessor) : base(options)
{
// Attempt (1)
userRepository.LogCurrentUser();
// Attempt (2)
var userAccessor = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);
if(userAccessor != null)
{
var userId = userAccessor.Value;
}
_tenant = tenantProvider.GetTenant(); // <- ideally send userId here for lookup on AD Graph
}
...
在对用户进行身份验证,然后尝试调用端点后,声明为空:
这是.. 非常混乱,任何帮助将不胜感激。
我试图关注的文章
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-5.0
https://www.koskila.net/how-to-get-current-user-in-asp-net-core/
解决方案
推荐阅读
- ios - 通过参数确定子类类型,但得到错误“使用未声明的类型”。我能怎么做?
- android - 反正有没有用adb在非root设备上获取不可调试的android应用程序的数据库?
- python - 第一行 5 个单词,第二行 4 个单词,第三行 2 个单词。那么我如何使用python计算它们
- angular - 将对象从一个类传递到另一个未定义
- php - Laravel 看不到表格
- linux - -bash:模块:加载模块时找不到命令
- magento-1.9 - Magento 1.9 上的管理员登录问题
- tfs - 从 TFS 中的作者下拉列表中删除不需要的作者(版本 15.105.25716.0)
- python - 带有源的 DRF ModelSerializer CharField 未出现在 valid_data 中
- javascript - 使用 vue.js 和 axios 操作注入的 HTML