OAuth 的授权链接里有一个回调地址的参数:
https://developers.e.qq.com/oauth/authorize?client_id=123456&redirect_uri=https://www.baidu.com?platform=jiaobuchong&name=jack&state=&scope=ADS_MANAGEMENT
这个授权链接里的回调地址参数是:
https://www.baidu.com?platform=jiaobuchong&name=jack
授权后地址变成了:
https://www.baidu.com?platform=jiaobuchong&auth_code=xxxxxxx
缺失了参数 name=jack,解决方法就是对回调地址中的 query 参数 :platform=jiaobuchong&auth_code=xxxxxxx进行 URLEncoder。如:
public class UrlencoderDemo {
public static void main(String[] args) throws Exception {
String url = "https://www.baidu.com?platform=jiaobuchong&name=jack";
System.out.println(getEncodeQueryUrl(url));
System.out.println(getEncodeQueryUrl("https://www.baidu.com?"));
System.out.println(getEncodeQueryUrl("https://www.baidu.com"));
System.out.println(getEncodeQueryUrl("https://www.baidu.com/"));
}
public static String getEncodeQueryUrl(String url) throws UnsupportedEncodingException {
if (StringUtils.isBlank(url)) {
throw new IllegalArgumentException("url is blank");
}
int pos = url.lastIndexOf("?");
if (pos > -1 && (pos < (url.length() - 1))) {
return url.substring(0, pos + 1) + URLEncoder.encode(url.substring(pos + 1), "UTF-8");
}
return url;
}
}
输出:
https://www.baidu.com?platform%3Djiaobuchong%26name%3Djack
https://www.baidu.com?
https://www.baidu.com
https://www.baidu.com/
授权链接变成这样就 ok 了:
https://developers.e.qq.com/oauth/authorize?client_id=123456&redirect_uri=https://www.baidu.com?platform%3Djiaobuchong%26name%3Djack&state=&scope=ADS_MANAGEMENT
OAuth回调参数丢失与解决
本文探讨OAuth授权链接中回调地址参数丢失的问题,特别是在微信授权场景下,参数name在授权后地址中消失的情况。通过使用URLEncoder对回调地址中的query参数进行编码,解决了参数丢失的问题,确保了授权流程的完整性。
2万+

被折叠的 条评论
为什么被折叠?



