parent
69a4848850
commit
5d0e80c85c
|
@ -33,46 +33,3 @@ SecurityWebFilterChain configure(ServerHttpSecurity http) throws Exception {
|
|||
----
|
||||
|
||||
You can now leverage Spring Security's <<webclient>> or <<webflux-roac,@RegisteredOAuth2AuthorizedClient>> support to obtain and use the access token.
|
||||
|
||||
== BearerTokenResolver
|
||||
|
||||
With interface BearerTokenResolver you can provide a strategy to resolve a bearer token.
|
||||
|
||||
The interface provides the next method:
|
||||
|
||||
[source,java]
|
||||
----
|
||||
/**
|
||||
* Resolve any <a href="https://tools.ietf.org/html/rfc6750#section-1.2" target="_blank">Bearer Token</a>
|
||||
* value from the request.
|
||||
*
|
||||
* @param request the request
|
||||
* @return the Bearer Token value or {@code null} if none found
|
||||
* @throws OAuth2AuthenticationException if the found token is invalid
|
||||
*/
|
||||
String resolve(HttpServletRequest request);
|
||||
----
|
||||
|
||||
In code base, you can find two implementation of this interface:
|
||||
HeaderBearerTokenResolver and DefaultBearerTokenResolver (based on RFC 6750).
|
||||
|
||||
Below you can see HeaderBearerTokenResolver, it takes a bearer token from request by header
|
||||
which was passed in constructor
|
||||
|
||||
[source,java]
|
||||
----
|
||||
public class HeaderBearerTokenResolver implements BearerTokenResolver {
|
||||
|
||||
private String header;
|
||||
|
||||
public HeaderBearerTokenResolver(String header) {
|
||||
Assert.hasText(header, "header cannot be empty");
|
||||
this.header = header;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String resolve(HttpServletRequest request) {
|
||||
return request.getHeader(this.header);
|
||||
}
|
||||
}
|
||||
----
|
||||
|
|
|
@ -1151,6 +1151,37 @@ OpaqueTokenIntrospector introspector() {
|
|||
Thus far we have only taken a look at the most basic authentication configuration.
|
||||
Let's take a look at a few slightly more advanced options for configuring authentication.
|
||||
|
||||
[[oauth2resourceserver-bearertoken-resolver]]
|
||||
=== Bearer Token Resolution
|
||||
|
||||
By default, Resource Server looks for a bearer token in the `Authorization` header.
|
||||
This, however, can be customized in a couple of ways.
|
||||
|
||||
==== Reading the Bearer Token from a Custom Header
|
||||
|
||||
For example, you may have a need to read the bearer token from a custom header.
|
||||
To achieve this, you can wire a `HeaderBearerTokenResolver` instance into the DSL, as you can see in the following example:
|
||||
|
||||
[source,java]
|
||||
----
|
||||
http
|
||||
.oauth2ResourceServer()
|
||||
.bearerTokenResolver(new HeaderBearerTokenResolver("x-goog-iap-jwt-assertion"));
|
||||
----
|
||||
|
||||
==== Reading the Bearer Token from a Form Parameter
|
||||
|
||||
Or, you may wish to read the token from a form parameter, which you can do by configuring the `DefaultBearerTokenResolver`, as you can see below:
|
||||
|
||||
[source,java]
|
||||
----
|
||||
DefaultBearerTokenResolver resolver = new DefaultBearerTokenResolver();
|
||||
resolver.setAllowFormEncodedBodyParameter(true);
|
||||
http
|
||||
.oauth2ResourceServer()
|
||||
.bearerTokenResolver(resolver);
|
||||
----
|
||||
|
||||
=== Bearer Token Propagation
|
||||
|
||||
Now that you're in possession of a bearer token, it might be handy to pass that to downstream services.
|
||||
|
|
Loading…
Reference in New Issue