-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
您好,这边经过简单的测试,发现在使用Oauth进行页面登陆后,跳转的地址使用#
而非?
分隔编码后的参数和URL路径(也就是说,参数会以fragment而非parameters的形式存在),例如:
https://oauth.cnblogs.com/auth/callback#code=210dd1ae7584ca228f3d2a84d6d557a83af96fe871e15aadf46180b3933c57a2&id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjlFMjcyMkFGM0IzRTFDNzU5RTI3NEFBRDI5NDFBNzg1MDlCMDc2RDAiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJuaWNpcnpzLUhIV2VKMHF0S1VHbmhRbXdkdEEifQ.eyJuYmYiOjE1OTM1NjYzNjYsImV4cCI6MTU5MzU2NjY2NiwiaXNzIjoiaHR0cDovL29wZW5hcGlfb2F1dGgtc2VydmVyIiwiYXVkIjoiZjJhMWEwM2QtM2RiNy00MTU1LTg0M2ItYWNjYzlmY2FmY2RkIiwibm9uY2UiOiI2WUdWVDdZRzBNSzdCS1gyIiwiaWF0IjoxNTkzNTY2MzY2LCJjX2hhc2giOiJFcnZOYTM2Qng2UTk4RjRLbVNyMmdBIiwic2lkIjoiMTVjNjgyODYzMzVlOWFkZWM0NjRlNjAxMzhlNDYyMDUiLCJzdWIiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJhdXRoX3RpbWUiOjE1OTM1MDgwOTgsImlkcCI6ImNuYmxvZ3Nfb2F1dGgiLCJhbXIiOlsiYXV0aG9yaXphdGlvbl9jb2RlIl19.QmE-ptQwpVhghUAmlgv3qFI4909RzqtOOSUZISebZ39v8wHpKNVWicowLdAVCt81B2EgS62A9O9vQxh8GrSL7I4aGc1gy6FP0XJ8Vx6DqVMx9Drg3R41wokJOanUUattLdAVKpQpgO3W80R-MC5_ZFN9XBS_YgCMSNMacgp4tddXlJxZULaixt7HDiieubAgHrwmrMF9nTfHnpddj1dnTOyNCjbukOBf9B7VzR1Qc31sKHjH03gAJeHhrXU58lW1h6oNRnZSHMGSvP3k8IybP9qI1Mvg-p1Qn-DaF81fr2n_ShKKZlLaTc4zYiulQKOlXZuQJbsLegT4FcUeit4F-A&scope=openid%20profile%20CnBlogsApi&state=LRNVJGMXIVZ0GCRA&session_state=vDJ3A55GTlsPdDP0P1jMsg5E025QQXTn27A8mQoi19U.ff01605d589d3938e962959c2403173a
在更换过redirect_uri后,也一样出现了类似的问题,分隔的符号为#
而不是?
。这将导致在真正用于redirect到用户自己的地址时,由于code、state等数值性质为fragment,所以无法通过parameter进行后端数据解析(实际上可能根本都无法传到后端,毕竟锚点本身就是作用于前端,用于定位的),从而导致数据丢失。
此外,在默认的跳转页面上,js对code的解析代码为
var url = window.location.href;
var codeElement = document.getElementById("code");
if (url.indexOf("code") > 0) {
var strart_index = url.indexOf("=");
var end_index = url.indexOf("&");
var code_value = url.slice(strart_index + 1, end_index);
codeElement.innerHTML = code_value;
} else {
codeElement.innerHTML = "不好意思,授权码走丢了....."
}
$.post("/Users/SignOut");
该部分的解析思路完全基于对=
和&
符号的定位,没有进行URL结构拆分,没有参考code
字符串的位置,对于拆出来的内容也没有进行url解码。目前Oauth默认跳转页面上暂时显示正常是因为code参数常常处于第一个参数位置且字符串内容较为简单,这实际上有可能出现很多的状况,包括但不限于:
- 有且仅有code一个参数(
&
将无法找到,code解析错误) - code参数并非位于第一个参数位(code解析结果将是第一个参数的值)
- code参数包含复杂内容(没有进行URL解码)
希望以上问题可以尽快得到回应并修复,非常感谢
Metadata
Metadata
Assignees
Labels
No labels