gpt4 book ai didi

javascript - Play 后端和 JavaScript 客户端之间的编码/解码 URL

转载 作者:行者123 更新时间:2023-11-29 18:09:56 27 4
gpt4 key购买 nike

我玩过 REST API 和一个 JavaScript 客户端,它在 URL 中发送 token :签名对,如下所示:

http://localhost:9000/auth/users/all/0/11?auth=eyJhbGciOiJIUzI1N...ciOiJIU:8so/gRFwOoPXp2x6RfyUpMYIMD4=

在 JavaScript 客户端中,我将 URL 编码如下:

signature = CryptoJS.HmacSHA1(token + method + obj.url.slice(baseUrl.length) + body, apiKey).toString(CryptoJS.enc.Base64);
...
obj.url = obj.url + (obj.url.indexOf("?") > 0 ? "&" : "?") + "auth=" + encodeURIComponent(token + ":" + signature);

然后,在 Play 后端,我像这样解码 URL:

import java.nio.charset.{StandardCharsets => SC}
import play.utils.UriEncoding

// auth(0) => token, auth(1) => signature
val auth = UriEncoding.decodePathSegment(jwt, SC.US_ASCII.name).split(":")

问题是 UriEncoding 因斜杠而崩溃:

play.api.Application$$anon$1:
Execution exception[[InvalidUriEncodingException: Cannot decode eyJhbGciOiJIUzI1N...vZ5v18d2EZik1ki5W9_6XABi-JA:8so/gRFwOoPXp2x6RfyUpMYIMD4=: illegal character at position 715.]]

现在我的问题是:

  1. 在 JavaScript 客户端中,我是否应该在使用 encodeURIComponent 对 URL 进行 base64 编码之前?
  2. 在 Play 后端,我应该使用什么编码,US_ASCII 还是 UTF_8

最佳答案

只需将 UriEncoding.decodePathSegment 替换为 UriEncoding.decodePath 即可:

import java.nio.charset.{StandardCharsets => SC}
import play.utils.UriEncoding

// auth(0) => token, auth(1) => signature
val auth = UriEncoding.decodePath(jwt, SC.US_ASCII.name).split(":")

希望对你有帮助。

关于javascript - Play 后端和 JavaScript 客户端之间的编码/解码 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28385462/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com