默认情况下,Spring Boot使用从客户端默认接受值为“/login”的HttpServletRequest
。
如果我想创建一个自定义身份验证系统,包括以下选项:
现在我已经知道,要更改默认登录路由,我需要:
. formLogin(). loginProcessingUrl("/api/v1/login")
但是下一部分呢?
我需要创建像SignInRequest
和SignInResponse
这样的对象吗?
如果是这样,客户端应用程序是否需要根据SignInRequest
和SignInResponse
映射数据?
这是我的注册
服务:
@Override
public User signup(User user) {
String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
return authRepository.save(user);
}
我想为signin创建类似的服务,比如:
@Override
public User signin(String email, String password) {
// somehow do login and return the user with access and refresh tokens?
}
即使我创建了一个SigninRequest
对象,客户端应用程序也会始终发送电子邮件和密码,对吗?
由于我没有处理过复杂的后端,我对如何解决这个问题的想法非常有限。
任何见解或资源将是有益的,谢谢。
我当前的attemptAuthentication
方法:
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
StringBuffer sb = new StringBuffer();
BufferedReader reader = null;
String content = "";
String email = "";
String password = "";
try {
reader = request.getReader();
char[] buffer = new char[1024];
int read;
while ((read = reader.read(buffer, 0, buffer.length)) != -1) {
sb.append(buffer, 0, read);
}
content = sb.toString();
Map<String, String> map = new ObjectMapper().readValue(content, Map.class);
email = map.get("email");
password = map.get("password");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ex) {
try {
throw ex;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(email, password);
return authenticationManager.authenticate(authenticationToken);
}
Spring支持许多复杂的自定义身份验证方法。Spring Security留档提供了完整的概述:
Spring Security文档-身份验证
根据您的问题,我得出结论,您希望坚持某种用户/密码身份验证。以下文件对此进行了描述:
Spring Security Docs-用户/密码验证
你基本上有三个选择:
再一次,从你的问题我得出结论,你想坚持表单登录。Spring为这种替代方案提供了许多选项,这些选项在上述文档中有详细介绍。
另一个好的起点是以下流行教程:
关于Spring Security表单登录的Baeldung教程
除了实现方面之外,在身份验证方法的问题中当然还有很多安全考虑:用户/密码身份验证被认为是一种相当不安全的身份验证形式,因为它需要用户和服务器之间交换秘密。更安全的表单是,例如,使用一次性密码或证书(例如,由浏览器处理的SSL客户端认证)。作为进一步阅读的起点,我可以建议:
上升堆栈-解释了Web身份验证方法
Port Swigger-身份验证漏洞
我正在开发ASP NET核心Web API,对认证方式的选择感到困惑。我曾经应用默认的Asp Net身份验证,但最近我知道了JWT。因此,我几乎像本文中一样实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core。但是我不能理解这个JWT的好处。通过简单的Asp Net身份认证,我不关心令牌存储等,我只需要用signI
LDAP的基础是什么?如果在配置期间没有给出任何基数。 我必须从基于web的应用程序验证/验证用户,并且我有java代码。 但是我需要为此建立基础(变量),我已经让另一个团队告诉我基础,他们说我们没有在LDAP上定制任何东西。LDAP的默认基数是什么?
我正在Spring Boot应用程序中学习Spring Security性,我试图了解默认情况下使用Spring Security性的身份验证方式。我知道Spring Security默认情况下使用基于表单的身份验证,但我使用基本身份验证对Postman进行了测试,结果正常。 我有一个非常简单的Spring Boot应用程序。 Rest控制器: 我在pom中添加了Spring Security依赖
我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl
申请认证 更新认证 获取授权用户的认证信息 申请认证 POST /user/certification 输入 名称 类型 描述 type String 必须, 认证类型,必须是 user 或者 org。 files Array\ Object 必须, 认证材料文件。必须是数组或者对象,value 为 文件ID。 name String 必须, 如果 type 是 org 那么就是负责人名字,如果
本篇文档讨论如何配合 Requests 使用多种身份认证方式。 许多 web 服务都需要身份认证,并且也有多种不同的认证类型。 以下,我们会从简单到复杂概述 Requests 中可用的几种身份认证形式。 基本身份认证 许多要求身份认证的web服务都接受 HTTP Basic Auth。这是最简单的一种身份认证,并且 Requests 对这种认证方式的支持是直接开箱即可用。 以 HTTP Basic