同源策略禁止读取位于 https://bm.kehuoa.com/api/auth/login 的远程资源。

博客内容涉及一个跨域资源共享(CORS)的问题,具体表现为Chrome浏览器因Access-Control-Allow-Origin头设置不正确而阻止了从https://www.kehuoa.com到https://bm.kehuoa.com/api/auth/login的XMLHttpRequest请求。火狐浏览器也给出了同源策略的禁止读取远程资源的错误。博主尝试通过在宝塔面板的Nginx配置中添加'add_header Access-Control-Allow-Origin *;'来解决,但问题依然存在,最终发现是Chrome浏览器的插件拦截导致的错误。
摘要由CSDN通过智能技术生成

chrome报错
Access to XMLHttpRequest at ‘https://bm.kehuoa.com/api/auth/login’ from origin ‘https://www.kehuoa.com’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: The ‘Access-Control-Allow-Origin’ header contains multiple values ‘http://evil.com/, *’, but only one is allowed.
火狐报错
同源策略禁止读取位于 https://bm.kehuoa.com/api/auth/login 的远程资源。

宝塔nginx配置
server
{
listen 80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
listen [::]:80;
server_name www.kehuoa.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/www.kehuoa.com/;

#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
    rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate    /etc/letsencrypt/live/www.kehuoa.com/fullchain.pem;
ssl_certificate_key    /etc/letsencrypt/live/www.kehuoa.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497  https://$host$request_uri;



#SSL-END

#ERROR-PAGE-START  错误页配置,可以注释、删除或修改
error_page 404 /404.html;
error_page 502 /502.html;
#ERROR-PAGE-END

#PHP-INFO-START  PHP引用配置,可以注释或修改
include enable-php-00.conf;
#PHP-INFO-END

#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/www.kehuoa.com.conf;
#REWRITE-END

#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
    return 404;
}

#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
    allow all;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null;
}
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    location ~
在PHP中使用cURL库实现与Microsoft Azure AD的SAML 2.0登录过程,通常涉及以下几个步骤: 1. 初始化cURL会话。 2. 设置cURL选项,包括URL、请求方法、头部信息、POST字段等。 3. 发送请求并获取响应。 4. 关闭cURL会话。 以下是一个简化的示例,展示如何使用PHP的cURL功能向Microsoft Azure AD发送登录请求: ```php <?php // 初始化cURL会话 $ch = curl_init(); // 设置请求的URL curl_setopt($ch, CURLOPT_URL, "https://login.microsoftonline.com/common/saml2"); // 设置请求方法为POST curl_setopt($ch, CURLOPT_POST, true); // 设置POST字段(例如用户名和密码) // 注意:实际应用中,SAML认证不需要直接在URL中提交用户名和密码,而是需要构建一个SAML请求 // 这里仅为示例,具体情况需要根据实际认证协议处理 $postData = http_build_query(array( 'username' => 'your_username', 'password' => 'your_password' )); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); // 设置请求头部信息,需要包括内容类型和接受类型等 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/x-www-form-urlencoded', 'Accept: */*' )); // 执行cURL请求并获取响应 $response = curl_exec($ch); // 检查是否有错误发生 if (curl_errno($ch)) { echo 'cURL error: ' . curl_error($ch); } else { // 打印服务器响应 echo $response; } // 关闭cURL会话 curl_close($ch); ?> ``` 请注意,上面的代码仅用于说明如何使用cURL来发送HTTP请求,并不适用于实际的SAML 2.0登录流程,因为SAML认证流程涉及到构建和解析SAML请求和响应,这些通常需要使用专门的库来处理,而不是简单的POST请求。 对于实际的SAML认证,你需要根据SAML协议构造认证请求,处理SAML响应,并从中解析出所需的令牌信息,通常需要使用如`OneLogin_Saml2\Auth`等专门的库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值