Angular с msal отправить недопустимый токен на бэкэнд
У меня есть приложение angular 10 и библиотека безопасности msal.
Я использую msal-browser 2.7.0
Я использовал этот пример https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-v2-samples/angular10-browser-sample/src/app/app. module.ts
Часть app.module.ts
import { MsalInterceptorConfig } from './lib/msal/msal.interceptor.config';
import { MsalBroadcastService, MsalGuard, MsalInterceptor, MsalService, MSAL_INSTANCE } from './lib/msal';
import { MSAL_GUARD_CONFIG, MSAL_INTERCEPTOR_CONFIG } from './lib/msal/constants';
import { MsalGuardConfiguration } from './lib/msal/msal.guard.config';
function MSALInstanceFactory(): IPublicClientApplication {
return new PublicClientApplication({
auth: {
clientId: 'd1851226-abe8-4da6-8332-af8700e0d999',
redirectUri: 'https://localhost:4200/find',
authority: 'https://login.microsoftonline.com/4fc25658-87c2-42bf-913c-cb9ae315a768',
postLogoutRedirectUri: window.location.origin
}
});
}
function MSALInterceptorConfigFactory(): MsalInterceptorConfig {
const protectedResourceMap = new Map<string, Array<string>>();
protectedResourceMap.set('https://graph.microsoft.com/v1.0/me', ['user.read']);
protectedResourceMap.set('http://localhost:8080/v2/**', ['openid' ]);
protectedResourceMap.set('http://localhost:8081/v2/**', ['openid' ]);
return {
interactionType: InteractionType.Popup,
// interactionType: InteractionType.Redirect,
protectedResourceMap,
};
}
@NgModule({
declarations: [
AppComponent,
FormValidationHintComponent
],
imports: [
AppRoutingModule,
BrowserModule,
FontAwesomeModule,
HttpClientModule,
DataTablesModule,
ModalModule,
FormsModule,
ReactiveFormsModule,
BrowserAnimationsModule,
ToastrModule.forRoot({
preventDuplicates: true
}),
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: WebpackTranslateLoader
},
defaultLanguage: 'en'
})
],
providers: [
DatePipe,
{
provide: HTTP_INTERCEPTORS,
useClass: AppHttpInterceptor,
multi: true
},
{
provide: APP_INITIALIZER,
useFactory: initializeApp,
multi: true,
deps: [HttpBackend, ConfigurationService]
},
{
provide: HTTP_INTERCEPTORS,
useClass: MsalInterceptor,
multi: true
},
{
provide: MSAL_INSTANCE,
useFactory: MSALInstanceFactory
},
{
provide: MSAL_GUARD_CONFIG,
useValue: {
//interactionType: InteractionType.Redirect,
interactionType: InteractionType.Popup
} as MsalGuardConfiguration
},
{
provide: MSAL_INTERCEPTOR_CONFIG,
useFactory: MSALInterceptorConfigFactory
},
MsalService,
MsalGuard,
MsalBroadcastService
],
bootstrap: [AppComponent]
})
export class AppModule {}
Токен доступа он отправляет на бэкэнд, но когда он отвечает, недействительный токен. Я тестировал его на jwt.io, он сказал недействительную подпись.
Если я использую токен идентификатора, бэкэнд ответит правильно.
Моя конечная часть серверной части
@Configuration
@EnableWebSecurity(debug = true)
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private JwtAuthenticationConverter jwtAuthenticationConverter() {
JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();
jwtGrantedAuthoritiesConverter.setAuthoritiesClaimName("roles");
jwtGrantedAuthoritiesConverter.setAuthorityPrefix("ROLE_");
JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(jwtGrantedAuthoritiesConverter);
return jwtAuthenticationConverter;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().configurationSource(request -> new CorsConfiguration().applyPermitDefaultValues())
.and() // (1)
.authorizeRequests().antMatchers("/api/**").hasRole("level1")
.anyRequest().authenticated() // (2)
.and()
.oauth2ResourceServer().jwt() // (3)
.jwtAuthenticationConverter(jwtAuthenticationConverter());
}
}
В моем application.properties у меня есть
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://login.microsoftonline.com/4fc25658-87c2-42bf-913c-cb9ae315a768/discovery/v2.0/token