gee*_*r57 1 security rest session spring spring-boot
我有一个Spring Boot后端服务器应用程序,该应用程序通过https实现基本身份验证。不会有传统的基于Web的前端,而是我的android和IOS客户端将使用Rest API调用。
后端应用程序当前正在验证收到的用户名和密码信息,并以正确的状态消息进行响应(401、200)。我可以使用spring boot会话让用户在会话开始时登录,然后对该会话的每个后续rest api调用使用会话值吗?
意识到此问题类似于[ 带有android和ios的Spring boot rest安全性,但该问题似乎并未涵盖缓存和使用针对会话的所有其他Rest API调用接收的会话值。是否可以在Rest put和post API命令中将会话值作为参数传递?目标是让应用程序在接受其他的放置和发布命令之前,验证用户的注册并验证其凭据。
我确实阅读了spring.io文档,但没有找到涵盖的主题。Spring引导的新功能。
您可以使用基于会话的身份验证和基于令牌的身份验证。成功登录后使用基于会话的身份验证时,它将在spring安全上下文中创建一个会话(限时),并作为响应将名为JSESSIONID(默认名称)的cookie返回给客户端。例如:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=301225C7AE7C74B0892887389996785D; Path=/auth/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 90
Date: Tue, 1 Nov 2017 01:19:38 GMT
Run Code Online (Sandbox Code Playgroud)
客户端需要保留此cookie,并且对于每个请求都需要设置此cookie(JSESSIONID)以请求能够以登录用户身份请求(直到会话过期)。作为客户端,您可以使用Postman进行测试,也可以通过编程方式使用Jersey客户端或HttpClients之一。您可以通过此链接检查与邮递员发送cookie 。
您也可以从此链接检查cookie域的工作方式。检查此请求是否已通过验证,我们可以如下使用“公正” Principal或“ httpServletRequest引用”:
@RequestMapping(value = "/username", method = RequestMethod.POST)
@ResponseBody
public String loggedUserName(Principal principal) {
return principal.getName();
}
@RequestMapping(value = "/username1", method = RequestMethod.POST)
@ResponseBody
public String loggedUserName1(HttpServletRequest request) {
Principal principal = request.getUserPrincipal();
return principal.getName();
}
Run Code Online (Sandbox Code Playgroud)
如果您调试/username1端点,您将能够看到cookie是否设置为正确请求,如果设置不正确,则可能会遇到与问题相关的匿名用户。
使用JWT(Json Web令牌)使用基于令牌的身份验证的第二种方法。它作为令牌的无状态工作。
{
"token_type": "Bearer",
"expires_in": "3599",
"resource": "qwd636-27bso-joiue9-ee",
"access_token": "eyJ77hqggqDd3DctNDFjMS05MjE2LWNiYjEw"
Run Code Online (Sandbox Code Playgroud)
}
对于每个请求,您都可以使用访问和刷新令牌检查请求的有效性。
Boolean isValidToken = jwtTokenUtil.validateToken(token, principal.getUsername());
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |