Giter VIP home page Giter VIP logo

Comments (6)

dosubot avatar dosubot commented on May 28, 2024 6

你好 @gotnix,很高兴再次看到你在这里提问!希望你一切都好。

您的 Bash 脚本看起来是正确的,但是我注意到您在构造签名字符串时,可能没有正确地处理路径和查询参数。在 Apollo 的 Java 和 Python 实现中,路径和查询参数都是 URL 编码的。这意味着所有的特殊字符,如空格和某些符号,都被转换为 URL 安全的编码。在 Bash 脚本中,您可以使用 curl-G--data-urlencode 选项来实现这一点。

另外,我注意到您在构造签名字符串时,使用的是 "\n" 作为分隔符。在 Bash 中,这可能不会被解析为换行符,而是被解析为两个字符:反斜杠和 n。您可以尝试使用 $'\n' 来表示换行符。

以下是一个修改后的 Bash 脚本示例:

#!/bin/bash

# Function to sign a string with HmacSHA1
function signature() {
  # Get arguments: timestamp in milliseconds, path with query, and secret
  timestamp_ms="$1"
  path_with_query="$2"
  secret="$3"

  # Define delimiter for string construction
  delimiter=$'\n'

  # Construct string to sign
  string_to_sign="$timestamp_ms$delimiter$path_with_query"

  # Use openssl for HmacSHA1 (assuming it's installed)
  signature=$(echo -n "${string_to_sign}" | openssl dgst -sha1 -hmac "${secret}" -binary | openssl enc -base64 -A)

  # Return the signature
  echo "$signature"
}

# 请求 Apollo
timestamp_ns=$(date +%s%N)  # Get current timestamp in milliseconds
timestamp_ms=$((timestamp_ns / 1000000))
secret="$1"
path_with_query="$2"
url_encode="$(printf %s ${path_with_query} | jq -sRr @uri)"

signature=$(signature "$timestamp_ms" "${url_encode}" "$secret")

#echo "Signature: $signature"
curl -v -G -H "Authorization: Apollo biz-sea-zl-api:${signature}" \
        -H "Timestamp: ${timestamp_ms}" \
        --data-urlencode "${url_encode}" \
        http://10.200.12.104:8080

如果这个修改后的脚本仍然无法解决您的问题,那么可能需要进一步检查 Apollo 服务器的日志,看看是否有更多关于 401 错误的详细信息。

Sources

About Dosu

This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

If you want to continue the conversation, start your reply with @dosu-bot.

from apollo.

dosubot avatar dosubot commented on May 28, 2024 2

I'm glad to hear that the suggested changes resolved your issue, @gotnix! It's completely okay to seek help here, and I'm here to assist you. If you have any more questions or run into any other issues in the future, feel free to reach out. Utilizing Discussions for smaller issues is a great idea, and it can also help other community members who might have similar questions.

If you have any more questions or need further assistance, don't hesitate to ask. I'm here to help!

About Dosu

This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

If you want to continue the conversation, start your reply with @dosu-bot.

from apollo.

gotnix avatar gotnix commented on May 28, 2024

@dosu-bot 的回答是正确的,用 $'\n' 来表示换行符,delimiter="\n" 修改为 delimiter=$'\n' 解决了问题。

感觉这个问题太小白了,更适合在 Discussions讨论,准备在 Discussions 建好帖子来关闭这个 Issue 的,结果发现 dosu-bot 已经解决问题了。

之前没有用过 Discussions ,我以后注意,优先使用 Discussions,打扰各位了。

from apollo.

nobodyiam avatar nobodyiam commented on May 28, 2024

@dosu-bot Awesome response! Really cool to see you getting better and better.

from apollo.

stale avatar stale commented on May 28, 2024

This issue has been automatically marked as stale because it has not had activity in the last 30 days. It will be closed in 7 days unless it is tagged "help wanted" or other activity occurs. Thank you for your contributions.

from apollo.

stale avatar stale commented on May 28, 2024

This issue has been automatically closed because it has not had activity in the last 7 days. If this issue is still valid, please ping a maintainer and ask them to label it as "help wanted". Thank you for your contributions.

from apollo.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.