AspNetCore 2:用于 Web 的 OpenIdConnect Cookie,用于 API 的 JWT Bearer。可能吗?
Posted
技术标签:
【中文标题】AspNetCore 2:用于 Web 的 OpenIdConnect Cookie,用于 API 的 JWT Bearer。可能吗?【英文标题】:AspNetCore 2: OpenIdConnect Cookie for web, JWT Bearer for API. Is it possible? 【发布时间】:2018-01-31 08:06:44 【问题描述】:我正在开发一个 AspNetCore 2 应用程序,该应用程序在 API 旁边具有 Web 视图(以 /api 为前缀),我正在尝试使用 OpenIdConnect + cookie 对 Web 视图进行身份验证,而 /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);
);
与 Configure 方法中的这一行一起:
app.UseAuthentication();
OpenIdConnectOptionsSetup 取自(稍作修改)aspnetcore AD B2C 示例存储库。
JWTBearerOptionsSetup 是对 aspnetcore AD B2C 示例存储库的重构,用于将 JWT 配置代码提取到外部类中。
现在,对 /api 端点的 AJAX 调用遇到了重定向到我们 AD 的登录策略端点的 OpenId,因此 Cookie/OpenIdConnect 中间件正在处理这些。我需要一种方法让 /api 直接进入 JWTBearer 中间件。
这可能吗?我必须将 Web 和 API 项目分开吗?
【问题讨论】:
试试这个wildermuth.com/2017/08/19/… 所以你得到这个工作了吗? Wildermuth 的解决方案是正确的吗? 【参考方案1】:我建议您将 web 和 api 分离为单独的服务,否则将更难推理系统的行为。系统故障排除也将更容易。
cookie 和 JWtBearer 处理程序都将尝试从会话 cookie 或从访问令牌。
【讨论】:
以上是关于AspNetCore 2:用于 Web 的 OpenIdConnect Cookie,用于 API 的 JWT Bearer。可能吗?的主要内容,如果未能解决你的问题,请参考以下文章
netcore中设置环境变量ASPNETCORE_ENVIRONMENT
我想在详细信息页面中而不是在 AspNetCore Web 应用程序的索引页面中构建列
此版本的 Microsoft.AspNetCore.All 只兼容 netcoreapp2.1 目标框架
BlazorWebassembly出现 Microsoft.AspNetCore.App 没有运行时包可用于指定的 RuntimeIdentifier“browser-wasm" 错误