【问题标题】:How to authenticate against Spring Security from Android app?如何从 Android 应用程序对 Spring Security 进行身份验证?
【发布时间】:2013-06-02 19:58:35
【问题描述】:

我正在使用 Spring 构建一个 WebApp。它由 Spring Security 保护,也应该从 Android 应用程序访问。在网页版中,我使用的是基本登录页面。

要从 Android 进行身份验证,我计划仅向标准身份验证 url /j_spring_security_check 发送一个带有凭据的 http 请求。然后总是在每个新请求中发送 cookie 以保持身份验证。

因为整个 WebApp 只能由登录用户访问,所以每次启动 Session 时都需要登录。我尝试通过一个简单的 html 公式发送描述的请求:

<html>
    <head><title>Test</title></head>
    <body>
        <form action="http://localhost:8080/livefeedback/j_spring_security_check" method="post">
            <input type="text", name="j_username" /><br />
            <input type="password" name="jpassword" /><br />
            <input type="submit" />
        </form>
    </body>
</html>

为了清楚起见:我想从 Android 应用程序发送一个 http 请求,类似于通过发送此 html 表单生成的请求。

但我只是被重定向到我的标准登录页面。我认为这是因为在尝试登录之前我必须从 spring 接收会话 ID。我不确定是否有更好的方式从安卓应用登录。

这是我在 spring-security.xml 中的 http 配置:

<http use-expressions="true" auto-config="true">
        <intercept-url pattern="/login"
            access="permitAll"/>
        <access-denied-handler />
        <form-login login-page="/login" default-target-url="/"/>
        <logout />
</http>

感谢您对每一个提示的期待!

【问题讨论】:

  • 跳转到登录页面后,你检查是否登录了吗?

标签: java android authentication spring-security


【解决方案1】:

我有一个(非常)旧的 Web 应用程序,带有 Spring Security,我从一个 Android 应用程序登录,既可以进行 REST 式调用,也可以抓取 HTML。

我不确定我所做的是否适用于您的应用程序,但我发现对于我的应用程序,诀窍是首先请求您实际想要访问的页面。

我观察到,当您在未经身份验证的情况下执行此操作时,原始目标会保存在会话中,然后您会被重定向到登录页面。 在我的例子中,它实际上是一个“登录/预登录”——这对于你的应用来说几乎肯定是不同的。

一旦我请求了页面并被重定向,我将登录参数发布到适当的 URL(您必须查看您的登录表单发布到的位置),如果登录成功,我将获得重定向请求的原始页面。

【讨论】:

  • 确实我用这种方式解决了这个问题。我首先必须从 Web 应用程序请求任何站点才能获得有效的会话 ID(cookie)。之后,我可以通过将凭据发送到相应的 URL 来登录。
【解决方案2】:

据我所知,应用程序通常是为使用 REST API 而构建的。因为移动应用程序不在网络浏览器中运行,所以这应该是最简单和推荐的方法。你可以观看Virgil Dobjanschi在谷歌工作的讲座。 Virgil 一开始就解释了使用 REST API 的优势。使用 HTTP Basic 可以非常轻松地保护 REST API。只需几个步骤,即可将 Spring Security 配置为保护 REST API。

【讨论】:

  • OP 询问的是如何登录他现有的网络应用程序,而不是如何更改网络应用程序以适应他的 Android 应用程序的访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2012-08-06
  • 2012-11-27
相关资源
最近更新 更多