从 bash 调用 REST API 时随机 401 未经授权

问题描述 投票:0回答:1

我在 REST 调用方面遇到了一个奇怪的问题。在服务器端,我有带有 IIS 的 Windwos 机器

我有一个 ID 列表(大约 8000 个 - 我也尝试过使用较少的记录),对于每个 ID,我需要执行 3 个不同的 REST 调用(2 个 GET 和一个 PUT)。

我的身份验证是在开始时进行的,我会获取会话 cookie,然后将其存储起来以供所有进一步的调用进行授权。最后我注销。

现在问题来了。在 Windows 上使用 C#,上述逻辑按预期工作。在 Linux bash 上,我有时会完全随机地收到 401 Unauthorized 错误。因此它与任何特定 ID 或 REST 调用无关。下一次使用相同 cookie 的调用再次成功。您知道什么可能导致该问题吗?客户在 LINUX 上使用 JAVA,他们也有同样的问题。

我尝试在通话之间设置一秒钟的睡眠时间,但没有成功。

我在 IIS 上启用了完整跟踪,在 bash 调用上启用了详细跟踪,在 IIS 上我根本看不到那些 401 请求,而 verbose 清楚地指示 401。如果我不在一开始就进行身份验证,那么所有不成功的尝试都会很明显在 IIS 日志中可见。

#!/bin/bash

#--------------------- LOGIN CALL ---------------------
"" > output.txt

curl -s -c cookie.txt -X POST "https://www.myapi.si/auth/apphost" -H "Content-Type: application/json" -d '{"authString":"Module=DialogUser;User=userTest;Password=Password123."}'

#--------------------- CALL GET ---------------------

objectId=("104569", "105079", "103103", "97267", "106385") 
for item in "${objectId[@]}"; do
    #--------------------- CALL GET CCCEmployeeDataSlim ---------------------
    echo "$item"
    echo "$item" >> output.txt
    myDate=$(date -u +"%H:%M:%S")
    echo "$myDate" >> output.txt
    curl -s -b "cookie.txt" -X GET --no-buffer "https://www.myapi.si/api/entities/GetObjectData?where=objectId='$item'&loadType=BulkReadOnly" -H "Accept: application/json" >> output.txt
    sleep 1
    echo "" >> output.txt
    echo "....................." >> output.txt
    #--------------------- CALL GET CCC_IsAccountValid ---------------------
    curl -s -b "cookie.txt" -X PUT -H "Content-Type: application/json" --no-buffer "https://www.myapi.si/api/script/IsAccountValid" -d '{"parameters": ["'$item'","2024-9-19"]}' >> output.txt
    sleep 1
    echo "" >> output.txt
    echo "....................." >> output.txt
    #--------------------- CALL GET CCCSecondaryIdentities ---------------------
    curl -s -b "cookie.txt" -X GET --no-buffer "https://www.myapi.si/api/entities/GETSecondaryIdentities?where=objectId='$item'&loadType=BulkReadOnly" -H "Accept: application/json" >> output.txt
    sleep 1
    echo "" >> output.txt
    echo "--------------------- NEXT ---------------------" >> output.txt
done
c# bash rest iis unauthorized
1个回答
0
投票

您可以尝试以下操作来解决问题。

  1. 确保您在授权标头中传递了正确的 API 令牌。
  2. 部分API刷新需要token来验证你的token没有过期。
  3. 确保您使用正确的授权和内容类型标头。
© www.soinside.com 2019 - 2024. All rights reserved.