Warum ist mein token abgelehnt? Was ist eine resource-ID? "Invalid token enthält keine Ressource-id (oauth2-Ressource)"
Ich versuche zu konfigurieren, OAuth2 für ein spring-Projekt. Ich bin mit einem gemeinsam genutzten LNF (oauth Implementierung von cloud foundry) Instanz-mein Arbeitsplatz bietet (so bin ich nicht versuchen, um einen Autorisierungs-server und dem Autorisierungs-server ist separat von der Ressource server). Das frontend ist eine single-page-Anwendung, und es wird praktisch direkt aus der Autorisierungs-server über die implizite gewähren. Ich habe die SPA-Einrichtung, wo es fügt die Authorization: Bearer <TOKEN>
header auf jeder web-API-Aufruf zu microservices.
Mein Problem ist jetzt mit der microservices.
Ich versuche, diese gemeinsame Autorisierungs-server zu authentifizieren, der microservices. Ich habe vielleicht ein Missverständnis hier, kaufen Sie mein Aktuelles Verständnis ist, dass diese microservices in die Rolle der Ressourcen-server, weil Sie Gastgeber der Endpunkte der SPA verwendet, um Informationen zu bekommen.
So, ich habe versucht, konfigurieren Sie einen microservice in etwa so:
@Configuration
@EnableResourceServer
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/**").authenticated();
}
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(accessTokenConverter());
}
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setVerifierKey("-----BEGIN PUBLIC KEY-----<key omitted>-----END PUBLIC KEY-----");
return converter;
}
@Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(tokenStore());
return defaultTokenServices;
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.tokenServices(tokenServices());
}
}
Nun, Wann immer ich traf eine /api/**
mit der Authorization: Bearer <TOKEN>
bekomme ich einen 403
mit diesem Fehler:
{
"error": "access_denied",
"error_description": "Invalid token does not contain resource id (oauth2-resource)"
}
Also hier sind meine Fragen:
- Wie Konfiguriere ich diese microservices zur Validierung der token und legen Sie eine
Principal
in controller-Methoden? Ich habe derzeit die Einstellungen, in denen die SPA hat und sendet den token und ich habe auch den öffentlichen Schlüssel zum überprüfen der Signatur des Tokens. Ich habe auch jwt.io zu testen, das token, und es sagt "Unterschrift Geprüft". - Was ist eine resource-id? Warum brauche ich es und warum kommt es zu dem oben genannten Fehler? Ist, dass eine Feder nur was??
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Frühjahr OAuth erwartet "aud" Anspruch in JWT token. Diese Behauptung ist-Wert übereinstimmen sollte, um die
resourceId
Wert, den Sie angeben, Ihr Frühling-app (falls nicht angegeben, ist er standardmäßig "oauth2-Ressource").Zu beheben, müssen Sie:
1) Loggen Sie sich in Ihrem shared LF und stellen Sie sicher, es enthält "aud" für sich beanspruchen.
2) Ändern Sie den Wert der "aud" Anspruch "oauth2-Ressource" oder am besten in den Frühlings-app-update
resourceId
zu behaupten, dass der Wert wie diese:What is a resource id? Why do I need it and why does it cause the error above? Is that a Spring only thing??
. Ich kann nicht finden, etwas über den Begriffresource id
. Ich weiß nicht warum, ich brauche das, mein client(frontend SPA) senden nur access-token(nicht JWT, einfach nur random text).Füge ich ein ähnliches Problem. In meinem Fall, ich benutzte jdbc Authentifizierung und Autorisierung-server und resource server war zwei separate API.
Authentorization server
}
Resource server
Mit dieser Konfiguration war ich immer
Um dieses Problem zu lösen, musste ich hinzufügen