使用 csrf 令牌从 android 应用程序访问 laravel 应用程序
Posted
技术标签:
【中文标题】使用 csrf 令牌从 android 应用程序访问 laravel 应用程序【英文标题】:access laravel app from android app with csrf token 【发布时间】:2015-10-16 03:02:21 【问题描述】:我正在学习 laravel 框架,我已经安装了 5.0 版本。 我将它用于 json api 服务,该服务将在调用特定路由后提供 JSON 输出。 如果我从浏览器请求 URL,它会很好地工作。但是当我尝试从我的 android 应用程序访问时,它会给出错误,即找不到文件异常(java.io.filenotfoundexception)。 检查日志后,我发现 laravel 有 Token Mismatch Exception 错误。 laravel 需要 csrf 令牌来访问它的资源。 我可以选择禁用该身份验证,但它似乎不太安全。
我能以某种方式允许从我的 android 应用程序而不是其他应用程序访问 laravel 应用程序吗?我们可以从 android 应用程序中指定 csrf 密钥吗?
【问题讨论】:
【参考方案1】:我试过了
...
nameValuePairs.add(new BasicNameValuePair("_token", CSRFTOKEN));
...
但它不起作用
如果可以试试
request.addHeader("X-CSRF-Token", token);
对我有用
【讨论】:
【参考方案2】:如果您不想禁用 CSRF 令牌,则需要在一个请求中检索 CSRF,然后将检索到的令牌与您的 POST 请求一起传递。
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
// Get the CSRF token
httpClient.execute(new HttpGet("http://www.yoursite.com/"));
CookieStore cookieStore = httpClient.getCookieStore();
List <Cookie> cookies = cookieStore.getCookies();
for (Cookie cookie: cookies)
if (cookie.getName().equals("XSRF-TOKEN"))
CSRFTOKEN = cookie.getValue();
// Access POST route using CSRFTOKEN
HttpPost httppost = new HttpPost("http://www.yoursite.com/your-post-route");
try
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("_token", CSRFTOKEN));
nameValuePairs.add(new BasicNameValuePair("stringdata", "Hello!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
catch (ClientProtocolException e)
// TODO Auto-generated catch block
catch (IOException e)
// TODO Auto-generated catch block
【讨论】:
但是通过使用我认为任何 android 应用程序都可以访问我的 api 正确,限制谁可以使用您的应用程序是“身份验证/授权”问题,而不是 CSRF 问题。 CSRF 仅验证 POST 请求是否来自发出先前 GET 请求的同一客户端,它不限制谁可以使用该站点。我有没有听错你的问题? 我需要帮助解决同样的问题。我尝试了这个解决方案,但无法通过。请查***.com/questions/38672539/…以上是关于使用 csrf 令牌从 android 应用程序访问 laravel 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
你如何在 django rest 框架中实现 CSRF 令牌?
使用新访问令牌在 android 上使用 asmack 进行 Facebook 聊天