【发布时间】:2019-05-28 02:52:19
【问题描述】:
我正在开发一个多租户 SPA 应用程序,它为数据调用后端 .Net Core Web API。前端 UI 将使用 MSAL 和 Microsoft 的 v2 通用端点针对 AAD 对用户进行身份验证并获取 id 和访问令牌。
在我的 Web API 中,我想验证颁发者,但正如 here 所述,使用公共端点提供的元数据使正常的颁发者验证无法使用。
我看到了一些可以覆盖或自定义令牌验证的地方的引用,但我不确定哪种方法更受欢迎,或者这些方法中的任何一种是否会导致不希望的副作用。
一种方法使用 JwtBearer 选项的事件:options.Events.TokenValidated,另一种方法使用 TokenValidationParameters 的 IssuerValidator 委托。
除了确保发行者存在于我的已验证发行者数据库中之外,我不想编写任何令牌验证逻辑。该逻辑应该放在IssuerValidator 或TokenValidated 中吗?
我当前的代码如下所示(目前为单租户设置)
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = "https://myauthority.com";
options.Audience = "https://myaudience.com/api/v1";
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = "myauthority.com",
ValidateAudience = true,
ValidAudience = "https://myaudience.com",
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
};
});
我在使用 IssuerValidator 时看到的一个问题是,似乎没有办法注入或传递对能够在数据库中查找租户 ID 所需的 dbContext 的引用。
有没有人解决过这个问题或做过类似的事情?
【问题讨论】:
-
刚刚阅读了这个dzimchuk.net/… 似乎很有帮助,并指向
IssuerValidator。我了解将 dbcontext 注入那里的问题,并且当我可以靠近计算机时会创建一个答案 -
@matt_lethargic 您提到发布了一个答案,演示了如何在
IssuerValidator中获取 dbcontext。那还要来吗?这感觉是执行我的验证的更自然的地方。
标签: c# single-page-application asp.net-core-webapi restful-authentication msal.js