大家好,已经6个小时了,我正在努力解决这个问题。
我有以下项目:
- Client App: ReactJS using axios library
- Server App: . net Core Web api实现JWT授权和认证。
问题:
- 当尝试使用axios从我的react应用程序发送get请求到后端并在头中附加jwt时,我总是得到401未经授权。
- 我尝试了同样的方式使用邮差它工作完美!!!!!!!!!!
我的尝试:
- 我尝试将cors添加到我的api中,并允许每个origin,每个header,每个方法仍然不起作用。
使用axios从ReactJS发送请求:
async function getAllUserTasks() {
try {
return axios({
method: "get",
url: "http://localhost:5133/todo/ToDos",
headers: {
Authorization: `Bearer ${localStorage.getItem("jwtToken")}`,
},
body: {
userId: JSON.stringify('924BF80F-F394-4927-8DCC-A7B67AFA663C')
},
});
} catch (error) {
console.log(error);
}
}
//call the function one time
useEffect(() => {
getAllUserTasks();
}, []);
.NET应用中JWT的配置:
services.AddAuthentication(defaultScheme: JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtSettings.Issuer,
ValidAudience = jwtSettings.Audience,
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(jwtSettings.Secret))
});
我的策略和cors配置:
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.WithOrigins("http://localhost:3000", "http://localhost:3000/")
.AllowAnyMethod()
.AllowAnyHeader();
}));
这真是令人沮丧!
尝试post请求,并从请求定义之外的本地存储获取令牌。我想其中一个可以解决你的问题。