grpc-java/examples/example-jwt-auth
Eric Anderson 9c5427fd44
Bump versions for lots of dependencies
I didn't touch Protobuf and Netty; we upgrade those individually. Below
are issues I encountered that caused me to not upgrade (further).

Guava 30.1-android fails to build with Android without enabling
desugaring. https://github.com/google/guava/issues/5358

Robolectric 4.4 breaks AndroidChannelBuilderTest.
https://github.com/grpc/grpc-java/issues/7731

Opencensus 0.28.1+ is incompatible with gRPC.
https://github.com/census-instrumentation/opencensus-java/issues/2069
https://github.com/grpc/grpc-java/issues/7732

Truth now defines the asm dependency as "compile" although it is still
optional. But asm appears to have accidentally included incorrect gradle
module metadata in their release (I see they've disabled the metadata on
master) which make gradle think it requires Java 8. We could asm
everywhere, but that's is annoying. It seems likely this will resolve
itself.

Mockito can be upgraded to 3.4.0, but it deprecates initMocks, which
causes more code churn than I wanted in this commit. I still
synchronized the example versions on 3.4.0, though, as it was already
being used in some examples and the examples don't use initMocks.
2020-12-17 09:04:09 -08:00
..
src examples: Add a JWT authentication example (#5915) 2020-03-17 17:43:31 -07:00
README.md examples: Add a JWT authentication example (#5915) 2020-03-17 17:43:31 -07:00
build.gradle Bump versions for lots of dependencies 2020-12-17 09:04:09 -08:00
pom.xml Bump versions for lots of dependencies 2020-12-17 09:04:09 -08:00
settings.gradle Swap to new Google Maven Central mirror URL 2020-07-10 08:45:49 -05:00

README.md

Authentication Example

This example illustrates a simple JWT-based authentication implementation in gRPC using server interceptor. It uses the JJWT library to create and verify JSON Web Tokens (JWTs).

The example requires grpc-java to be pre-built. Using a release tag will download the relevant binaries from a maven repository. But if you need the latest SNAPSHOT binaries you will need to follow COMPILING to build these.

The source code is here. To build the example, run in this directory:

$ ../gradlew installDist

The build creates scripts auth-server and auth-client in the build/install/example-jwt-auth/bin/ directory which can be used to run this example. The example requires the server to be running before starting the client.

Running auth-server is similar to the normal hello world example and there are no arguments to supply:

auth-server:

The auth-server accepts optional argument for port on which the server should run:

USAGE: auth-server [port]

The auth-client accepts optional arguments for server-host, server-port, user-name and client-id:

auth-client:

USAGE: auth-client [server-host [server-port [user-name [client-id]]]]

The user-name value is simply passed in the HelloRequest message as payload and the value of client-id is included in the JWT claims passed in the metadata header.

How to run the example:

# Run the server:
./build/install/example-jwt-auth/bin/auth-server 50051
# In another terminal run the client
./build/install/example-jwt-auth/bin/auth-client localhost 50051 userA clientB

That's it! The client will show the user-name reflected back in the message from the server as follows:

INFO: Greeting: Hello, userA

And on the server side you will see the message with the client's identifier:

Processing request from clientB

Maven

If you prefer to use Maven follow these steps. You can run the example as follows:

$ # Run the server
$ mvn exec:java -Dexec.mainClass=io.grpc.examples.authentication.AuthServer -Dexec.args="50051"
$ # In another terminal run the client
$ mvn exec:java -Dexec.mainClass=io.grpc.examples.authentication.AuthClient -Dexec.args="localhost 50051 userA clientB"