Мне нужно вызвать защищенный веб-API из приложения Angular 9, представив токен-носитель Azure B2 C JWT. Я использую Angular 9 с. NET CORE 3.1 Web API. Мне удалось сгенерировать токен Azure B2 C, но я застрял на вызове безопасной конечной точки веб-API, так как я получаю сообщение об ошибке на стороне сервера.
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//JWT Authentication
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(jwtConfig =>
{
jwtConfig.Audience = Configuration["AzureAdB2C:ResourceId"];
jwtConfig.Authority = $"{Configuration["AzureAdB2C:Instance"]}{Configuration["AzureAdB2C:TanantId"]}";
jwtConfig.RequireHttpsMetadata = false;
jwtConfig.SaveToken = true;
jwtConfig.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
ValidateIssuer =true,
ValidateAudience = true,
ValidateLifetime = true
};
});
//CORS policy
services.AddCors(options =>
options.AddPolicy("CorsPolicy", builder => builder.AllowAnyOrigin()));
Контроллер и конечная точка веб-API
[Authorize]
[Route("txn/v1/[controller]/[action]")]
[EnableCors("CorsPolicy")]
[ApiController]
public class DashboardController : ControllerBase
{
[HttpGet]
public ActionResult<HelloMessage> GetMessage()
{
var result = new HelloMessage()
{
GivenName = "james",
ReturnMessage = "Dashboard@ Hello, Welcome to Digital tech"
};
return result;
}
Angular перехватчик токена
@Injectable()
export class TokenInterceptorService implements HttpInterceptor{
constructor(private injector: Injector
// private authservice: AuthService
){}
intercept(req, next){
let authservice = this.injector.get(AuthService);
console.log("from injector ", authservice.accessToken);
let tokenizedRequest = req.clone({
setHeaders:{
Authorization: 'Bearer '+ authservice.accessToken
}
})
return next.handle(tokenizedRequest)
}
testAPI1(){
console.log("calling test API ...");
this.http.get('https://localhost:5001/txn/v1/Dashboard/GetMessage')
.subscribe((data)=>{
console.warn(data);
})
}
Ошибка
введите описание изображения здесь