AspNetCore 2:用于Web的OpenIdConnect Cookie,用于API的JWT Bearer.可能吗?

Mac*_*ius 7 asp.net openid-connect

我正在开发一个AspNetCore 2应用程序,具有Web视图旁边的API(带有前缀/ API),我想有网络视图中使用OpenIdConnect +饼干进行身份验证,而/ API前缀的路由与JWT令牌进行身份验证(移动应用兼容性).

到目前为止,我已经设法使用以下代码注册和配置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);
  });
Run Code Online (Sandbox Code Playgroud)

与Configure方法上的这一行一起:

app.UseAuthentication();
Run Code Online (Sandbox Code Playgroud)

OpenIdConnectOptionsSetup取自(稍作修改)aspnetcore AD B2C示例存储库.

JWTBearerOptionsSetup是来自aspnetcore AD B2C样本仓库的重构,用于将JWT配置代码提取到外部类中.

现在,对于/ api端点的AJAX调用正在满足我们AD的登录策略端点的OpenId重定向,因此Cookie/OpenIdConnect中间件正在处理这些.我需要一种让/ api直接进入JWTBearer中间件的方法.

这可能吗?我必须将Web和API项目分开吗?

And*_*ndy 0

我建议您将 Web 和 api 分成单独的服务,因为否则将很难推断系统的行为。系统故障排除也将变得更加容易。

cookieJWtBearer处理程序都将尝试从会话 cookie 或访问令牌在您的系统中创建ClaimsPrincipal用户对象。

也许这篇博文可以给你一些提示: