mirror of https://github.com/grpc/grpc-java.git
104 lines
4.8 KiB
Markdown
104 lines
4.8 KiB
Markdown
Google Authentication Example
|
|
==============================================
|
|
|
|
This example illustrates how to access [Google APIs](https://cloud.google.com/apis/docs/overview) via gRPC and
|
|
open source [Google API libraries](https://github.com/googleapis) using
|
|
[Google authentication](https://developers.google.com/identity/protocols/OAuth2), specifically the
|
|
[GoogleCredentials](https://github.com/googleapis/google-auth-library-java/blob/master/oauth2_http/java/com/google/auth/oauth2/GoogleCredentials.java)
|
|
class.
|
|
|
|
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](../COMPILING.md) to build these.
|
|
|
|
Please follow the [steps](./README.md#to-build-the-examples) to build the examples. The build creates
|
|
the script `google-auth-client` in the `build/install/examples/bin/` directory which can be
|
|
used to run this example.
|
|
|
|
The example uses [Google PubSub gRPC API](https://cloud.google.com/pubsub/docs/reference/rpc/) to get a list
|
|
of PubSub topics for a project. You will need to perform the following steps to get the example to work.
|
|
Wherever possible, the required UI links or `gcloud` shell commands are mentioned.
|
|
|
|
1. Create or use an existing [Google Cloud](https://cloud.google.com) account. In your account, you may need
|
|
to enable features to exercise this example and this may cost some money.
|
|
|
|
2. Use an existing project, or [create a project](https://pantheon.corp.google.com/projectcreate),
|
|
say `Google Auth Pubsub example`. Note down the project ID of this project - say `xyz123` for this example.
|
|
Use the project drop-down from the top or use the cloud shell command
|
|
```
|
|
gcloud projects list
|
|
```
|
|
to get the project ID.
|
|
|
|
3. Unless already enabled, [enable the Cloud Pub/Sub API for your project](https://console.developers.google.com/apis/api/pubsub.googleapis.com/overview)
|
|
by clicking `Enable`.
|
|
|
|
4. Go to the [GCP Pub/Sub console](https://pantheon.corp.google.com/cloudpubsub). Create a couple of new
|
|
topics using the "+ CREATE TOPIC" button, say `Topic1` and `Topic2`. You can also use the gcloud command
|
|
to create a topic:
|
|
```
|
|
gcloud pubsub topics create Topic1
|
|
```
|
|
|
|
5. You will now need to set up [authentication](https://cloud.google.com/docs/authentication/) and a
|
|
[service account](https://cloud.google.com/docs/authentication/#service_accounts) in order to access
|
|
Pub/Sub via gRPC APIs as described [here](https://cloud.google.com/iam/docs/creating-managing-service-accounts).
|
|
(**Note:** This step is unnecessary on Google platforms (Google App Engine / Google Cloud Shell / Google Compute Engine) as it will
|
|
automatically use the in-built Google credentials). Assign the [role](https://cloud.google.com/iam/docs/granting-roles-to-service-accounts) `Project -> Owner`
|
|
and for Key type select JSON. Once you click `Create`, a JSON file containing your key is downloaded to
|
|
your computer. Note down the path of this file or copy this file to the computer and file system where
|
|
you will be running the example application as described later. Assume this JSON file is available at
|
|
`/path/to/JSON/file` Set the value of the environment variable GOOGLE_APPLICATION_CREDENTIALS to this file path. You can also use the `gcloud` shell commands to
|
|
[create the service account](https://cloud.google.com/iam/docs/creating-managing-service-accounts#iam-service-accounts-create-gcloud).
|
|
|
|
#### To build the examples
|
|
|
|
1. **[Install gRPC Java library SNAPSHOT locally, including code generation plugin](../../COMPILING.md) (Only need this step for non-released versions, e.g. master HEAD).**
|
|
|
|
2. Run in this directory:
|
|
```
|
|
$ ../gradlew installDist
|
|
```
|
|
|
|
|
|
#### How to run the example:
|
|
`google-auth-client` requires one command line argument for the project ID:
|
|
|
|
```text
|
|
USAGE: GoogleAuthClient <project-ID>
|
|
```
|
|
|
|
The first argument <project-ID> is the project ID in the form "projects/xyz123" where "xyz123" is
|
|
the project ID of the project you created (or used) in step 2 above.
|
|
|
|
```bash
|
|
# Run the client
|
|
./build/install/example-gauth/bin/google-auth-client projects/xyz123
|
|
```
|
|
That's it! The client will show the list of Pub/Sub topics for the project as follows:
|
|
|
|
```
|
|
INFO: Topics list:
|
|
[name: "projects/xyz123/topics/Topic1"
|
|
, name: "projects/xyz123/topics/Topic2"
|
|
]
|
|
```
|
|
|
|
## Maven
|
|
If you prefer to use Maven:
|
|
1. **[Install gRPC Java library SNAPSHOT locally, including code generation plugin](../../COMPILING.md) (Only need this step for non-released versions, e.g. master HEAD).**
|
|
|
|
2. Run in this directory:
|
|
```
|
|
$ mvn verify
|
|
$ # Run the client
|
|
$ mvn exec:java -Dexec.mainClass=io.grpc.examples.googleAuth.GoogleAuthClient -Dexec.args="projects/xyz123"
|
|
```
|
|
|
|
## Bazel
|
|
If you prefer to use Bazel:
|
|
```
|
|
$ bazel build :google-auth-client
|
|
$ # Run the client
|
|
$ ../bazel-bin/google-auth-client projects/xyz123
|
|
``` |