gpt4 book ai didi

javascript - 通过 Javascript 发送授权 token 承载

转载 作者:行者123 更新时间:2023-12-03 23:00:27 27 4
gpt4 key购买 nike

我正在尝试通过 Javascript 将授权 token 承载发送到 REST 端点,所以我这样做:

$.ajax( {
url: 'http://localhost:8080/resourceserver/protected-no-scope',
type: 'GET',
beforeSend : function( xhr ) {
xhr.setRequestHeader( "Authorization", "Bearer " + token );
},
success: function( response ) {
console.log(response);
}

我的端点在 SpringBoot 容器下运行,因此我正在获取 HttpServletRequest 并尝试获取 AUthorization header ,但始终为空:

static Authentication getAuthentication(HttpServletRequest request) {
String token = request.getHeader(HEADER_STRING);
//token is always null
...

编辑 1这是客户端(浏览器)的错误

OPTIONS http://localhost:8080/resourceserver/protected-no-scope 403 ()
Failed to load http://localhost:8080/resourceserver/protected-no-scope: Response for preflight has invalid HTTP status code 403.

编辑2为了在后端启用 CORS,我在 spring 中使用以下注释:

@RestController
@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true", allowedHeaders = "Authorization", methods =
{RequestMethod.GET, RequestMethod.OPTIONS, RequestMethod.POST})
public class MyResource {

编辑3我尝试在过滤器中添加 CORS 但没有成功:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {

HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;

httpServletResponse.setHeader("Access-Control-Allow-Origin", httpServletRequest.getHeader("Origin"));
httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
httpServletResponse.setHeader("Access-Control-Max-Age", "3600");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");


Authentication authentication = TokenAuthenticationService
.getAuthentication(httpServletRequest);

SecurityContextHolder.getContext().setAuthentication(authentication);
filterChain.doFilter(request, response);
}

最佳答案

您可以使用headers键添加标题

$.ajax({
url: 'http://localhost:8080/resourceserver/protected-no-scope',
type: 'GET',
contentType: 'application/json'
headers: {
'Authorization': 'Bearer <token>'
},
success: function (result) {
// CallBack(result);
},
error: function (error) {

}
});

您需要在后端启用 CORS

https://stackoverflow.com/a/32320294/5567387

关于javascript - 通过 Javascript 发送授权 token 承载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51506579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com