# `Oidcc.ProviderConfiguration.Worker`
[🔗](https://github.com/erlef/oidcc/blob/ee3434ddec86c14471af8f8a8f159971e654da3c
/lib/oidcc/provider_configuration/worker.ex#L4)

OIDC Config Provider Worker

Loads and continuously refreshes the OIDC configuration and JWKs

## Usage in Supervisor

```elixir
Supervisor.init([
  {Oidcc.ProviderConfiguration.Worker, %{issuer: "https://accounts.google.com"}}
], strategy: :one_for_one)
```

# `opts`
*since 3.0.0* 

```elixir
@type opts() :: %{
  optional(:name) =&gt; GenServer.name(),
  :issuer =&gt; :uri_string.uri_string(),
  optional(:provider_configuration_opts) =&gt;
    :oidcc_provider_configuration.opts(),
  optional(:backoff_min) =&gt; :oidcc_backoff.min(),
  optional(:backoff_max) =&gt; :oidcc_backoff.max(),
  optional(:backoff_type) =&gt; :oidcc_backoff.type()
}
```

See `t:oidcc_provider_configuration_worker.opts/0`

# `child_spec`
*since 3.0.0* 

```elixir
@spec child_spec(opts :: opts()) :: Supervisor.child_spec()
```

# `get_jwks`
*since 3.0.0* 

```elixir
@spec get_jwks(name :: GenServer.name()) :: JOSE.JWK.t()
```

Get Parsed Jwks

## Examples

    iex> {:ok, pid} =
    ...>   Oidcc.ProviderConfiguration.Worker.start_link(%{
    ...>   issuer: "https://accounts.google.com"
    ...> })
    ...> %JOSE.JWK{} =
    ...>   Oidcc.ProviderConfiguration.Worker.get_jwks(pid)

# `get_provider_configuration`
*since 3.0.0* 

```elixir
@spec get_provider_configuration(name :: GenServer.name()) ::
  Oidcc.ProviderConfiguration.t()
```

Get Configuration

## Examples

    iex> {:ok, pid} =
    ...>   Oidcc.ProviderConfiguration.Worker.start_link(%{
    ...>   issuer: "https://accounts.google.com"
    ...> })
    ...> %Oidcc.ProviderConfiguration{issuer: "https://accounts.google.com"} =
    ...>   Oidcc.ProviderConfiguration.Worker.get_provider_configuration(pid)

# `refresh_configuration`
*since 3.0.0* 

```elixir
@spec refresh_configuration(name :: GenServer.name()) :: :ok
```

Refresh Configuration

## Examples

    iex> {:ok, pid} =
    ...>   Oidcc.ProviderConfiguration.Worker.start_link(%{
    ...>   issuer: "https://accounts.google.com"
    ...> })
    ...> :ok = Oidcc.ProviderConfiguration.Worker.refresh_configuration(pid)

# `refresh_jwks`
*since 3.0.0* 

```elixir
@spec refresh_jwks(name :: GenServer.name()) :: :ok
```

Refresh JWKs

## Examples

    iex> {:ok, pid} =
    ...>   Oidcc.ProviderConfiguration.Worker.start_link(%{
    ...>   issuer: "https://accounts.google.com"
    ...> })
    ...> :ok = Oidcc.ProviderConfiguration.Worker.refresh_jwks(pid)

# `refresh_jwks_for_unknown_kid`
*since 3.0.0* 

```elixir
@spec refresh_jwks_for_unknown_kid(name :: GenServer.name(), kid :: String.t()) :: :ok
```

Refresh JWKs if the provided `Kid` is not matching any currently loaded keys

## Examples

    iex> {:ok, pid} =
    ...>   Oidcc.ProviderConfiguration.Worker.start_link(%{
    ...>   issuer: "https://accounts.google.com"
    ...> })
    ...> :ok = Oidcc.ProviderConfiguration.Worker.refresh_jwks_for_unknown_kid(pid, "kid")

# `start_link`
*since 3.0.0* 

```elixir
@spec start_link(opts :: opts()) :: GenServer.on_start()
```

Start Configuration Worker

## Examples

    iex> {:ok, _pid} =
    ...>   Oidcc.ProviderConfiguration.Worker.start_link(%{
    ...>   issuer: "https://accounts.google.com",
    ...>   name: __MODULE__.GoogleConfigProvider
    ...> })

---

*Consult [api-reference.md](api-reference.md) for complete listing*
