Django和Java小程序授权失败
我正在用allauth构建一个Django应用程序 我有一个页面,需要身份验证,在那里我放了一个Java小程序。此小程序确实会获取对其他页面(同一django项目)的请求,这些页面返回Json对象 小程序使用JSObject从父网页获取CSRF标记 问题是,我想用身份验证控件设置所有页面,但我无法从小程序的父网页获取sessionidcookie,因此它无法获取(也无法发布)数据以获取(或保存)数据 也许这是一个简单的方法来获得这个,但我是一个新手,我没有发现任何东西 自由地问你是否需要什么 多谢各位 编辑: 我在楼下写过,我发现sessionidcookie被标记为HTTPOnly,所以现在的问题是,哪种方法是允许小程序执行POST和GET请求的最安全的方法。 例如,是否可以在页面中创建一个JS方法,该方法获取数据并将其传递给小程序? 也许我可以用同样的方式来写这篇文章 编辑: 我使用页面中的jquery调用成功地获取了数据。现在的问题是代码抛出一个InvocationTargetException。我发现了问题的所在,但我不知道如何解决它 以下是Jquery代码:Django和Java小程序授权失败,java,django,applet,session-cookies,Java,Django,Applet,Session Cookies,我正在用allauth构建一个Django应用程序 我有一个页面,需要身份验证,在那里我放了一个Java小程序。此小程序确实会获取对其他页面(同一django项目)的请求,这些页面返回Json对象 小程序使用JSObject从父网页获取CSRF标记 问题是,我想用身份验证控件设置所有页面,但我无法从小程序的父网页获取sessionidcookie,因此它无法获取(也无法发布)数据以获取(或保存)数据 也许这是一个简单的方法来获得这个,但我是一个新手,我没有发现任何东西 自由地问你是否需要什么 多
function getFloor() {
$.get(
"{% url ... %}",
function(data) {
var output = JSON.stringify(data);
document.mapGenerator.setFloor(output)
}
);}
这里是小程序的两个功能。
**部分是问题的根源
public void setFloor(String input) {
Floor[] f = Floor.parse(input);
}
public static Floor[] parse(String input) {
**Gson gson = new Gson();**
Floor[] floors = gson.fromJson(input, Floor[].class);
return floors;
}
这是我服务器上的日志,您可以看到小程序试图从服务器(而不是小程序)加载Gson库
有什么可以帮我的吗?您可以在小程序中执行以下操作:
String cookies = JSObject.getWindow(this).eval("document.cookie").toString();
这将为您提供该页面用分号分隔的所有Cookie。现在,为了测试Purpose,我将在自定义会话值中传递sessionid的值,但我认为这不是最简单的方法……您可以选择禁用CSRF中间件吗?您可以在适当的地方推出定制的中间件。问题不在于csrf,而在于sessionid。在每种情况下,我都决定在小程序实例化时使用会话值加载数据。在测试期间,我没有发现使用JQuery GET函数存在任何安全问题。因此,我将使用发布结果。
new Gson()
不太可能引发异常,更可能是下一行(Gson不知道如何转换到Floor[])。如果这是您指出的行,则可能是您没有在applet标记(在HTML中)中包含Gson jar文件。它不起作用。这里的问题是cookie被标记为HTTPOnly,因此从Java或Js.lol中获取它是“不可能的”。所以你想绕过你自己的安全?为什么不让小程序再次向服务器发出请求,以便它可以直接获取CSRF令牌?否则你基本上是在试图规避你自己的安全。:P不幸的是,我现在才发现这个问题。不,现在我不是想绕过我的服务器,而是想不使用csrf或sessionid解决这个问题。我在这里提出了另一个问题:因为这似乎是一个更复杂的问题。
String cookies = JSObject.getWindow(this).eval("document.cookie").toString();