Josh Cummings 130c77b8e0 Update MockWebServer Dependency 1 månad sedan
..
gradle 1ce2c14dba Update to Gradle 8.10.2 10 månader sedan
src 14b6bd4f56 Add PrincipalResolver to RestClient sample 10 månader sedan
README.adoc 14b6bd4f56 Add PrincipalResolver to RestClient sample 10 månader sedan
build.gradle 130c77b8e0 Update MockWebServer Dependency 1 månad sedan
gradle.properties 0786b6f766 Update to Spring Securtiy 6.5.0-SNAPSHOT 1 månad sedan
gradlew cc0e6f0d33 Add sample for OAuth2 RestClient interceptor 11 månader sedan
gradlew.bat cc0e6f0d33 Add sample for OAuth2 RestClient interceptor 11 månader sedan
settings.gradle cc0e6f0d33 Add sample for OAuth2 RestClient interceptor 11 månader sedan

README.adoc

= OAuth 2.0 RestClient Sample

This sample demonstrates making protected resources requests with `RestClient` via an interceptor that adds the `Authorization` header to each request.

== 1. Running the tests

To run the tests, do:

[source,bash]
----
./gradlew integrationTest
----

Or import the project into your IDE and run `OAuth2RestClientApplicationITests` from there.

== 2. Running the app with an Authorization Server and Resource Server

Before running this application with the default configuration, you will need to start up an Authorization Server and Resource Server, which are provided as additional samples and pre-configured to work with this OAuth2 RestClient Sample out of the box.

To run the https://github.com/spring-projects/spring-security-samples/tree/main/servlet/spring-boot/java/oauth2/authorization-server[Authorization Server] as a stand-alone application, navigate to `servlet/spring-boot/java/oauth2/authorization-server` and do:

[source,bash]
----
./gradlew bootRun
----

Or import the project into your IDE and run `OAuth2AuthorizationServerApplication` from there.

To run the https://github.com/spring-projects/spring-security-samples/tree/main/servlet/spring-boot/java/oauth2/resource-server/restclient[Resource Server] as a stand-alone application, navigate to `servlet/spring-boot/java/oauth2/resource-server/restclient` and do:

[source,bash]
----
./gradlew bootRun
----

Or import the project into your IDE and run `OAuth2ResourceServerApplication` from there.
Next, you can run this sample.

To run this sample as a stand-alone application, do:

[source,bash]
----
./gradlew bootRun
----

Or import the project into your IDE and run `OAuth2RestClientApplication` from there.
Once the application is running, visit http://127.0.0.1:8080[127.0.0.1:8080] in your browser to try out the sample.

== 3. Alternate Configurations

This sample demonstrates alternate strategies for resolving a `clientRegistrationId` (see https://github.com/spring-projects/spring-security-samples/tree/main/servlet/spring-boot/java/oauth2/restclient/src/main/java/example/ClientRegistrationIdResolverConfiguration.java[ClientRegistrationIdResolverConfiguration] for more information).

Activate one of the following profiles to try them out:

1. `default` - Demonstrates the default setup with `RequestAttributeClientRegistrationIdResolver`. Uses `login-client` as the `clientRegistrationId` to log in and `messaging-client` for authorization.

2. `current-user` - Demonstrates a custom `ClientRegistrationIdResolver` that simply resolves the `clientRegistrationId` from the current user. Uses `login-client-with-messaging` to log in.

3. `composite` - Demonstrates a composite `ClientRegistrationIdResolver` that tries multiple ways of resolving a `clientRegistrationId`. Uses `login-client-with-messaging` to log in.

4. `authentication-required` - Demonstrates a custom `ClientRegistrationIdResolver` that requires authentication using OAuth 2.0 or Open ID Connect 1.0. Uses `login-client-with-messaging` to log in.

This sample also demonstrates alternate strategies for resolving a `principal` (see https://github.com/spring-projects/spring-security-samples/tree/main/servlet/spring-boot/java/oauth2/restclient/src/main/java/example/PrincipalResolverConfiguration.java[PrincipalResolverConfiguration] for more information).

Activate one of the following profiles to try them out:

1. `per-request` - Demonstrates an alternate setup with `RequestAttributePrincipalResolver` that resolves the principal using attributes.

2. `anonymous-user` - Demonstrates a custom `PrincipalResolver` that statically resolves a `principal`. Requires specifying the `principal` via `RequestAttributePrincipalResolver.principal(Authentication)`.

[TIP]
====
You can activate a profile with the `./gradlew bootRun` command by adding the argument `--args='--spring.profiles.active=xyz'`.
====