Я создаю реагирующее приложение, используя Auth0 в качестве oauth-аутентификации и поддерживаю его ASP. NET core api.
Из React я перенаправляю пользователя на Auth0, который у меня есть настроить одностраничное приложение.
Когда вход успешен, он перенаправляет пользователя обратно в мое приложение React с кодом.
Затем я хочу перевести этот код в токен JWT для авторизовать доступ к API бэкэнда. Вот где он не работает.
После входа в систему я использую предоставленную библиотеку примеров Auth0 и вызываю:
const { getTokenSilently } = useAuth0();
...
var token = await getTokenSilently();
...
axios({
url: `/api/Folder`,
method: 'GET',
headers: {
Authorization: `Bearer ${token}`
}
})
он предоставляет токен, но токен кажется слишком мал для токена JWT, в заголовке он выглядит примерно так:
Authorization: Bearer 7hExNvsOM14TpY0qUnPbVqpizwLLxynw
Ответ от моего C# asp. net core api: 1017 *
www-authenticate: Bearer error="invalid_token"
Мой C# Код выглядит следующим образом: startup.cs
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = Configuration["Auth0:Authority"];
options.Audience = Configuration["Auth0:Audience"];
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = ClaimTypes.NameIdentifier
};
});
IdentityModelEventSource.ShowPII = true; //for debug purposes
....
app.UseAuthentication();
app.UseAuthorization();
folderController.cs
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class FolderController : ControllerBase
{
....
}