Im使用Spring-Security和JWT库生成令牌。当用户通过身份验证时,我得到授权令牌作为响应:
Authorization: Bearer eyJhbGciOiJIUzUxMiJ...
在所有教程中,我都看到作者在使用POSTMAN发送GET请求时将此令牌粘贴在授权标头中,但没有教程说明它如何在实际请求中工作。尽管在我的邮递员中,当我粘贴标题时,它是有效的,我得到了200个OK。
我想知道如何在真正的代码中包含这个标题?
public class JwtUsernameAndPasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
private final AuthenticationManager authenticationManager;
private final JwtConfig jwtConfig;
private final SecretKey secretKey;
public JwtUsernameAndPasswordAuthenticationFilter(
AuthenticationManager authenticationManager,
JwtConfig jwtConfig,
SecretKey secretKey) {
this.authenticationManager = authenticationManager;
this.jwtConfig = jwtConfig;
this.secretKey = secretKey;
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
try {
System.out.println("Authentication token " + request.getInputStream());
UsernameAndPasswordAuthenticationRequest authenticationRequest =
new ObjectMapper().readValue(request.getInputStream(),
UsernameAndPasswordAuthenticationRequest.class);
Authentication authentication = new UsernamePasswordAuthenticationToken(
authenticationRequest.getUsername(),
authenticationRequest.getPassword()
);
SecurityContextHolder.getContext().setAuthentication(authentication);
Authentication authenticate = authenticationManager.authenticate(authentication);
return authenticate;
} catch(IOException e) {
throw new RuntimeException("new runtime exception " + e);
}
}
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response,
FilterChain chain, Authentication authResult) throws IOException, ServletException {
String token = Jwts.builder()
.setSubject(authResult.getName())
.claim("authorities", authResult.getAuthorities())
.setIssuedAt(new Date())
.setExpiration(java.sql.Date.valueOf(LocalDate.now().plusDays(jwtConfig.getTokenExpirationAfterDays())))
.signWith(secretKey)
.compact();
System.out.println("This is token: " + token);
response.addHeader(jwtConfig.getAuthorizationHeader(), jwtConfig.getTokenPrefix() + token);
}
}
编辑
这是我的前端请求。在这个调用之后,我得到带有授权令牌的响应头。现在的问题是我如何使用这个令牌来实现未来的请求?:
$.ajax({
type: 'POST',
url: "/login",
data: JSON.stringify({
"username" : "linda",
"password" : "password",
}),
success: function(response) {
// some logic
},
error: function(e) {
console.log(e);
},
processData: false,
//dataType: "json",
contentType: "application/json; charset=utf-8"
});
我建议使用单页框架,如角或反应,因为提供更好的工具。但是你使用的框架完全取决于你的应用程序。对于JQuery和javascript,你可以这样使用:
你必须在浏览器中存储令牌。其中一种方法是使用“本地存储”:
success: function(response) {
// not sure how you send token
localStorage.setItem('token', response.token)
},
然后将令牌头添加到ajax请求中。请注意,您必须在代码中处理空令牌或过期令牌。
token = localStorage.getItem('token')
$.ajaxSetup({
headers: { Authorization: 'Bearer ' + token }
})
//call ajax
用户通过身份验证后,您希望使用本地存储或会话存储将返回的令牌存储在客户端。接下来,您将保护任何需要所述令牌(受保护路由)的路由/endpoint。应该有一个授权保护,检查头中是否存在令牌(与通过邮递员发送请求时使用的格式相同)。如果令牌无效或从报头中完全丢失,它通常会重定向到不同的路由(通常是登录页面)。
这不是针对Spring的,而是针对JSON Web Tokens的。实现从一种语言/框架到另一种语言/框架不同,据我所知,这总是一般的过程。
我正在努力构建两个asp.netmvc web应用程序之间的安全集成;和调用网络扫描应用程序的ERP系统。所以目前在接收器应用程序(网络扫描应用程序)上我有以下操作方法,应该只由ERP系统执行:- 而在调用者系统(ERP系统)上,我有以下调用上述动作方法的动作方法。 如上面代码所示,我正在发送一个安全令牌,它存储在两个应用程序的web中。配置文件。通过这种方式,我可以确保(或者这是我的意图)网络扫
寻求有关如何进行微服务授权的建议。 我使用spring/spring boot来提供所有的微服务 在使用JWT令牌到达实际微服务之前,我可以通过Spring Cloud网关进行身份验证,但是在授权方面,我不确定如何做到这一点。 我想在内部处理business microservice中每个endpoint的授权。 有没有办法将JWT令牌传递给微服务,或者我需要调用authserver来获取用户中的
我有一个Web api终端,它给我JWT令牌。它不是一个完全授权的服务器。它只是可以生成一个JWT令牌。 现在我有另一个用 aspnet 核心编写的 Web 应用程序。其中在启动中.cs我添加了以下行,以便我可以使用收到的 JWT 令牌进行授权 我也有一个登录表单(在web应用程序中),用户输入用户名和密码,我发送到web api并获得令牌。为了保护web应用程序中的任何控制器,我只使用了[Aut
我使用Localstack和Test容器((test容器: localstack: 1.15.2))进行集成测试,并在测试设置中设置秘密,如下所示:代码示例 现在,测试因错误而崩溃: com.amazonaws.services.secretsmanager.model.AWSSecretsManagerException:请求中包含的安全令牌无效。(服务:AWSSecuresManager;状态
我是新来的AWS和我试图执行CRUD操作本地DynamoDB从一个Java程序。Java程序是一个AWS示例。 我安装了AWS CLI并设置了以下配置-根据AWS文档,我不需要本地DynamoDB的真正AWS访问和密钥。 我在~/中设置了以下值。aws/config和~/。通过在aws CLI中运行aws configure获得aws/credentials。 我有本地DYnamoDB JAR与此
我正在尝试使用JWT身份验证设置一个简单的Angularjs应用程序。 我给新注册的用户发了一封带有jwt令牌链接的邮件,以验证该邮件是否存在。链接如下所示: < code > http://127 . 0 . 0 . 1:3000/verify email/eyj 0 exaioijkv 1 qilchbgcioijiuzi 1 nij 9 . eyj 1c 2 vytmftzsi 6 injp