Spring Security令牌认证-RESTful JSON服务
我希望将Spring Security用于Spring MVC应用程序,该应用程序将严格地是JSON
Web服务。我已经进行了一些研究并阅读了几篇文章,但实际上还没有发现任何完整的内容。我希望应用程序完全无状态,并使用基于令牌的身份验证。我不希望Spring
MVC应用程序具有任何形式,或使用形式进行身份验证。它应严格接受JSON中的请求和数据,并返回JSON响应。
将有一个Angular
JS客户端应用程序,该应用程序将需要发送用户名和密码,并从该应用程序获取令牌以用于顺序请求。在某些时候,可能会有Android客户端也访问此Web服务。
我假设Spring
Security在内部将令牌映射到用户会话,这意味着它知道令牌XXXXXXXXXXXX是管理员用户Bob,令牌AAAAAAAAAA是标准用户Joe。但是我对Spring
Security没有太多的经验,所以我不知道这一切如何结合在一起。我仍然希望能够在控制器和服务方法上使用安全注释。
Spring Security中有没有办法做到这一点?
回答:
这是从Spring-Rest-Boilerplate开始的好地方。
- 第一次,您必须使用http基本身份验证,然后登录(发送用户名/密码),这将返回令牌。
- 在后续请求中,您将使用此令牌进行身份验证。
- 您将必须向该链中添加一个过滤器,该过滤器将基于令牌进行身份验证。
您必须提供令牌格式和相同的加密。理想情况下,您也需要保留令牌的到期时间,到期时间和用户名一起可能是令牌的一部分。 使用加密算法,
像MD5这样的加密哈希函数并获取整个令牌的哈希值。
:正如 MaciejStępyra 指出的那样,MD5似乎已损坏,建议使用SHA-256之类的更强哈希函数。
默认情况下,Spring安全会将您重定向到登录页面,但是在REST的情况下这没有意义,因此请AuthenticationEntryPoint
在config中使用自定义(请参阅示例github代码)。
我为令牌使用了以下格式:
hash = MD5(用户名+魔术键)
到期时间=当前时间戳+分钟到到期时间
<security:http realm="Protected API" use-expressions="true" auto-config="false" create-session="always" entry-point-ref="**CustomAuthenticationEntryPoint**"> <security:custom-filter ref="**authenticationTokenProcessingFilter**" position="PRE_AUTH_FILTER" />
<security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>
注意:感 的代码。我已将此作为参考并开发了类似的东西。
以上是 Spring Security令牌认证-RESTful JSON服务 的全部内容, 来源链接: utcz.com/qa/424627.html