You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Angular调用PHP IIS接口时的CORS错误及401未授权问题

解决方案

你遇到的CORS报错核心原因是W3C CORS规范的强制限制:当请求携带凭证(withCredentials: true)时,服务端不允许返回Access-Control-Allow-Origin: *通配符,必须指定明确的允许跨域的源地址。你需要按以下步骤调整配置:

第一步:调整PHP服务端CORS配置(必须修改,仅改前端无法解决)

将PHP的CORS头逻辑替换为以下内容,明确指定你Angular应用的实际运行地址,同时补充OPTIONS预检请求的处理逻辑(IIS的Windows身份验证会触发预检请求,预检请求默认不带身份凭证,需要单独处理直接返回200):

<?php
// 此处替换为你Angular实际运行的地址,比如本地开发就是http://localhost:4200,生产环境填对应部署域名
$allowedOrigin = 'http://localhost:4200';
header("Access-Control-Allow-Origin: " . $allowedOrigin);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');

// 直接响应OPTIONS预检请求,不走身份验证逻辑
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    http_response_code(200);
    exit;
}

echo '<pre>';
print_r($_SERVER['REMOTE_USER']);

第二步:Angular端配置优化

你现有代码里的withCredentials: true配置本身是正确的,无需修改。如果需要全局统一配置,避免每个请求单独写参数,可以用HTTP拦截器统一给目标服务的请求加凭证:

拦截器示例代码

// auth.interceptor.ts
import { Injectable } from '@angular/core';
import {
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpInterceptor,
  HTTP_INTERCEPTORS
} from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
    // 仅给目标IIS服务的请求附加凭证
    if (request.url.includes('my_server')) {
      request = request.clone({
        withCredentials: true
      });
    }
    return next.handle(request);
  }
}

在app.module.ts的providers数组中注册拦截器即可全局生效:

providers: [
  { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
]

第三步:IIS补充配置(可选,解决预检请求401问题)

如果调整完前后端配置后仍出现401错误,打开IIS对应站点的「身份验证」设置,右键点击「Windows身份验证」→「高级设置」,勾选「启用内核模式身份验证」,同时在「提供程序」列表中保留Negotiate和NTLM两个选项即可。

内容的提问来源于stack exchange,提问作者bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:24:05