Add to your Cargo.toml
:
toml
yew-oauth2 = "0.5"
By default, the router
integration is disabled, you can enable it using:
toml
yew-oauth2 = { version = "0.5", features = ["router"] }
Starting with version 0.2.0
, this crate also supports Open ID Connect. That should be just an extension on top
of OAuth2, but the reality is more complicated.
In order to use this, a different crate is required in the background. That crate also has a dependency on ring
, which
uses a lot of C code, which is not available on WASM.
That is why this functionality is gated by the feature openid
. When you enable this feature, for the time being, you
will also need to use the patched version of openidconnect
, by adding the following to your Cargo.toml
:
```toml [dependencies]
openidconnect = { version = "2.2", default-features = false, features = ["reqwest", "rustls-tls", "rustcrypto"] }
[patch.crates-io] openidconnect = { git = "https://github.com/ctron/openidconnect-rs", rev = "6ca4a9ab9de35600c44a8b830693137d4769edf4" } ```
Also see: https://github.com/ramosbugs/openidconnect-rs/pull/58
A quick example how to use it (see below for more complete examples):
``rust
use yew::prelude::*;
use yew_oauth2::prelude::*;
use yew_oauth2::oauth2::*; // use
openid::*` when using OpenID connect
fn myapp() -> Html { let config = Config { clientid: "my-client".into(), authurl: "https://my-sso/auth/realms/my-realm/protocol/openid-connect/auth".into(), tokenurl: "https://my-sso/auth/realms/my-realm/protocol/openid-connect/token".into(), };
html!(
fn myappmain() -> Html { let agent = useauthagent().expect("Must be nested inside an OAuth2 component");
let login = { let agent = agent.clone(); Callback::from(move || { let _ = agent.startlogin(); }) }; let logout = Callback::from(move |_| { let _ = agent.logout(); });
html!(
<>
This repository also has some complete examples:
Testing the example projects locally can be done using a local Keycloak instance and trunk
.
Start the Keycloak instance using:
shell
podman-compose -f develop/docker-compose.yaml up
Then start trunk
with the local developer instance:
shell
cd yew-oauth2-example # or yew-oauth2-redirect-example
trunk serve
And navigate your browser to http://localhost:8080.
NOTE: It is important to use http://localhost:8080
instead of e.g. http://127.0.0.1:8080
, as Keycloak is configured by default to use http://localhost:*
as a valid redirect URL when in dev-mode. Otherwise, you will get
an "invalid redirect" error from Keycloak.