将 ASP.NET Core 部署到 IIS UI 和 API 到单独的网站
Posted
技术标签:
【中文标题】将 ASP.NET Core 部署到 IIS UI 和 API 到单独的网站【英文标题】:Deploy ASP.NET Core to IIS UI and API into seperated websites 【发布时间】:2020-03-08 23:35:35 【问题描述】:拥有包含 UI 和 API 的解决方案。
用户界面
是一个 ASP.NET Core MVC
项目,仅包含 HomeController
和 Index
视图,该视图在 VueJS
应用程序中加载。
API
是一个ASP.NET Core Web API
,用于使用 Windows 身份验证提供 VueJS 应用程序。
部署
当前设置(1 个 IIS 网站)我们有一个来源 (https://example.com),API 由 https://exampel.com/api 访问
新设置(2 个 IIS 网站)UI
有 2 个来源 (https://app.example.com),API
有 (https://api.example.com)。
对于新设置,我们需要实现 CORS(跨域)以允许其他网站使用 API。但因此我们需要为OPTIONS
preflight 请求启用匿名身份验证。
有没有办法防止这种情况发生?
【问题讨论】:
Enable Cross-Origin Requests (CORS) in ASP.NET Core 这应该会有所帮助。 @aguafrommars 我做了所有这些,但要使其正常工作,我需要将匿名身份验证设置为 true 以允许来自 CORS 的 OPTIONS 请求。问题是要使其安全,或者是否有其他解决方案可以禁用匿名身份验证但让 CORS 正常工作 你的意思是在 IIS 上?还是使用 ASP.Net Core 身份验证和授权中间件? 没有办法避免需要允许未经身份验证的 OPTIONS 请求。 CORS 协议需要它。更具体地说,CORS 协议要求浏览器从 CORS 预检 OPTIONS 请求中省略所有凭据。 【参考方案1】:设法使用自定义中间件进行身份验证来解决它:
public async Task InvokeAsync(HttpContext context)
// Check if the request is a PREFLIGHT => OPTIONS request
if (context.User.Identity.IsAuthenticated || context.Request.Method == "OPTIONS")
await _next(context);
return;
await context.ChallengeAsync("Windows");
并在启动时在管道的开头添加:
app.UseMiddleware<AuthenticationMiddleware>();
【讨论】:
以上是关于将 ASP.NET Core 部署到 IIS UI 和 API 到单独的网站的主要内容,如果未能解决你的问题,请参考以下文章
将 asp.net core web api 部署到 IIS 7.5 时出现 500 错误
如何将针对 net452 项目的 ASP.NET Core 部署为 IIS 中网站的 IIS 应用程序
ASP.NET Core--.net core 3.1 部署到 IIS