我正在开发一个AspNetCore 2应用程序,其中包含Web视图和API(带有/ api前缀),我正在尝试使用OpenIdConnect + cookie对Web视图进行身份验证,而使用JWT令牌对/ api前缀路由进行身份验证(用于移动应用程序兼容性)。
到目前为止,我已设法使用此代码注册和配置Cookie,OpenIdConnect和JWT中间件:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie()
.AddOpenIdConnect(options => {
var optionsSetup = new OpenIdConnectOptionsSetup(b2cOptions);
optionsSetup.Configure(options);
});
services.AddAuthentication()
.AddJwtBearer(options => {
var optionsSetup = new JWTBearerOptionsSetup(b2cOptions);
optionsSetup.Configure(options);
});
配置方法中的这一行:
app.UseAuthentication();
OpenIdConnectOptionsSetup取自(稍作修改)aspnetcore AD B2C示例存储库。
JWTBearerOptionsSetup是来自aspnetcore AD B2C示例repo的重构,用于将JWT配置代码提取到外部类中。
现在,对于/ api端点的AJAX调用正在通过OpenId重定向到AD的登录策略端点,因此Cookie / OpenIdConnect中间件正在处理这些。我需要一种让/ api直接进入JWTBearer中间件的方法。
这可能吗?我必须将Web和API项目分开吗?
答案 0 :(得分:1)
我建议您将 web 和 api 分离到单独的服务中,否则将更难以推理系统的行为。系统故障排除也会更容易。
cookie 和 JWtBearer 处理程序都将尝试在您的系统中创建 ClaimsPrincipal 用户对象,无论是从会话 cookie 还是从访问令牌。