Google-Oauth
Description
Google-Oauth is a server-side verification library for Google oauth2.
Google-Oauth can help you to verify id_token or access_token which is generated from Google.
Usage (async)
1. Setup
To import Google-Oauth to your project, please add this line into your Cargo.toml.
[]
= { = "1" }
If you decided to use async function, please select an async runtime. Here are some options for you:
We use tokio in our example, and refactor our main function like this:
// #[async_std::main] // when you use [async-std]
// #[actix_web::main] // when you use [actix-web]
async
2. Do Verification (id_token)
You can get your client_id from Google Admin Console (or somewhere else), and an id_token has been provided from
your user. They are all string-like. Use the following code to do verification:
use AsyncClient;
async
Do verification without any client id
When no client_id is provided for AsyncClient, cliend_id will not be used when validating id_token. In this case, AsyncClient will accept all client_id. However, Google issuer (iss), expiration (exp) and JWT hash CAN NOT be skipped.
3. Do Verification (AccessToken)
Sometimes, Google will return an access_token instead of id_token. Google-Oauth still provides API for validate
access_token from Google.
Note: when validating access_token, we don't matter the client_id. So if you just need to validate access_token,
you can simply pass an empty client_id, just like this:
use AsyncClient;
async
Warning: the result of access_token is different from the result of id_token, although they have a same field sub.
For full example, please view ./example/async_client/
Algorithm Supported
For validating id_token, Google may use these two kinds of hash algorithm to generate JWTs:
- RS256
- ES256
However, I cannot find any approach to get a valid ES256 token, and as a result, I remained a unimplemented branch,
and return an Err if the JWT is ES256 hashed.
Feel free to create a new issue if you have an example. PR is welcome.
Usage (blocking)
Google-Oauth also provides a blocking client. You need to enable blocking feature:
[]
= { = "1", = ["blocking"] }
You can use google_oauth::Client to validate tokens:
use Client;
For full example, please view ./examples/blocking/
WebAssembly (wasm)
Google-Oauth supports wasm, feature wasm is required.
[]
= { = "1", = ["wasm"] }
You can build this library with wasm-pack build --features wasm. (cargo install wasm-pack to install first.)
If you need to import wasm into your project, you can use google_oauth::Client to run async functions.
Features
default: enableAsyncClient.blocking: enableClient.wasm: disableAsyncClientandClient(blocking), enableClient(wasm).reqwest-rustls: use rustls as the TLS backend of the Reqwest client