{"id":21953795,"url":"https://github.com/erlef/oidcc","last_synced_at":"2026-04-14T23:12:14.572Z","repository":{"id":42434584,"uuid":"50982997","full_name":"erlef/oidcc","owner":"erlef","description":"OpenId Connect client library in Erlang \u0026 Elixir","archived":false,"fork":false,"pushed_at":"2026-03-30T11:02:24.000Z","size":6124,"stargazers_count":226,"open_issues_count":12,"forks_count":62,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-03-30T12:23:15.623Z","etag":null,"topics":["client","elixir","erlang","openid","openid-client","openid-connect","security-wg"],"latest_commit_sha":null,"homepage":"https://hexdocs.pm/oidcc","language":"Erlang","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/erlef.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://members.erlef.org/join-us","https://erlef.org/sponsors#become-a-sponsor"]}},"created_at":"2016-02-03T07:42:23.000Z","updated_at":"2026-03-30T11:02:26.000Z","dependencies_parsed_at":"2026-02-21T23:00:56.826Z","dependency_job_id":null,"html_url":"https://github.com/erlef/oidcc","commit_stats":null,"previous_names":["indigo-dc/oidcc","erlef/oidcc","erlang-openid/oidcc"],"tags_count":59,"template":false,"template_full_name":null,"purl":"pkg:github/erlef/oidcc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erlef%2Foidcc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erlef%2Foidcc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erlef%2Foidcc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erlef%2Foidcc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/erlef","download_url":"https://codeload.github.com/erlef/oidcc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erlef%2Foidcc/sbom","scorecard":{"id":1236827,"data":{"date":"2025-09-02T15:46:43Z","repo":{"name":"github.com/erlef/oidcc","commit":"6ca3fb631b7f9c3cc8fabad03c301da97bf37e47"},"scorecard":{"version":"v5.2.1","commit":"ab2f6e92482462fe66246d9e32f642855a691dc1"},"score":7.4,"checks":[{"name":"Maintained","score":10,"reason":"12 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":1,"reason":"Found 2/13 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#code-review"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1","Info: detected update tool: RenovateBot: .github/renovate.json:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dependency-update-tool"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/branch_main.yml:16","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/branch_main.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/branch_main.yml:28","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/branch_main.yml:39","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/part_dependency_submission.yml:16","Info: jobLevel 'contents' permission set to 'read': .github/workflows/part_docs.yml:22","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/part_release.yml:24","Info: jobLevel 'contents' permission set to 'read': .github/workflows/part_test.yml:376","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pr.yml:17","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/pr.yml:18","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pr.yml:29","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecards.yml:29","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecards.yml:30","Info: jobLevel 'issues' permission set to 'read': .github/workflows/scorecards.yml:32","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/scorecards.yml:33","Info: jobLevel 'checks' permission set to 'read': .github/workflows/scorecards.yml:35","Info: jobLevel 'contents' permission set to 'read': .github/workflows/tag-beta.yml:19","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/tag-beta.yml:39","Info: jobLevel 'contents' permission set to 'read': .github/workflows/tag-stable.yml:17","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/tag-stable.yml:37","Info: topLevel 'contents' permission set to 'read': .github/workflows/branch_main.yml:9","Info: topLevel 'contents' permission set to 'read': .github/workflows/part_dependency_submission.yml:7","Info: topLevel 'contents' permission set to 'read': .github/workflows/part_docs.yml:12","Info: topLevel 'contents' permission set to 'read': .github/workflows/part_publish.yml:14","Info: topLevel 'contents' permission set to 'read': .github/workflows/part_release.yml:15","Info: topLevel 'contents' permission set to 'read': .github/workflows/part_test.yml:14","Info: topLevel 'contents' permission set to 'read': .github/workflows/pr.yml:10","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/tag-beta.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/tag-stable.yml:9"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":10,"reason":"all dependencies are pinned","details":["Info:  54 out of  54 GitHub-owned GitHubAction dependencies pinned","Info:  38 out of  38 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: Passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":1,"reason":"1 out of the last 5 releases have a total of 1 signed artifacts.","details":["Info: signed release artifact: docs.tar.gz.sigstore: https://github.com/erlef/oidcc/releases/tag/v3.5.2","Warn: release artifact v3.5.1 not signed: https://api.github.com/repos/erlef/oidcc/releases/210764683","Warn: release artifact v3.5.0 not signed: https://api.github.com/repos/erlef/oidcc/releases/210325432","Warn: release artifact v3.4.0 not signed: https://api.github.com/repos/erlef/oidcc/releases/209905315","Warn: release artifact v3.3.0 not signed: https://api.github.com/repos/erlef/oidcc/releases/201788432","Warn: release artifact v3.5.2 does not have provenance: https://api.github.com/repos/erlef/oidcc/releases/216603994","Warn: release artifact v3.5.1 does not have provenance: https://api.github.com/repos/erlef/oidcc/releases/210764683","Warn: release artifact v3.5.0 does not have provenance: https://api.github.com/repos/erlef/oidcc/releases/210325432","Warn: release artifact v3.4.0 does not have provenance: https://api.github.com/repos/erlef/oidcc/releases/209905315","Warn: release artifact v3.3.0 does not have provenance: https://api.github.com/repos/erlef/oidcc/releases/201788432"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#signed-releases"}},{"name":"SAST","score":9,"reason":"SAST tool is not run on all commits -- score normalized to 9","details":["Warn: 23 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#sast"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#license"}},{"name":"Branch-Protection","score":4,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: branch 'main' does not require approvers","Warn: codeowners review is not required on branch 'main'","Info: 'last push approval' is required to merge on branch 'main'","Info: 'up-to-date branches' is required to merge on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/erlef/.github/SECURITY.md:1","Info: Found linked content: github.com/erlef/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/erlef/.github/SECURITY.md:1","Info: Found text in security policy: github.com/erlef/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#security-policy"}},{"name":"CI-Tests","score":4,"reason":"11 out of 24 merged PRs checked by a CI test -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#ci-tests"}},{"name":"Contributors","score":10,"reason":"project has 11 contributing companies or organizations","details":["Info: found contributions from: TransitOPS, athena-logistics, elixir-gettext, elixir-lang, erlang ecosystem foundation, erlef, erlef-cna, mbta, quantum-elixir, sustema-ag, transitops @mbta"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#contributors"}}]},"last_synced_at":"2025-09-02T17:39:29.816Z","repository_id":42434584,"created_at":"2025-09-02T17:39:29.817Z","updated_at":"2025-09-02T17:39:29.817Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31818903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","elixir","erlang","openid","openid-client","openid-connect","security-wg"],"created_at":"2024-11-29T07:13:07.609Z","updated_at":"2026-04-14T23:12:14.567Z","avatar_url":"https://github.com/erlef.png","language":"Erlang","readme":"\u003c!--\nSPDX-FileCopyrightText: 2023 Erlang Ecosystem Foundation\nSPDX-License-Identifier: Apache-2.0\n--\u003e\n\n\u003cdiv style=\"margin-right: 15px; float: left;\"\u003e\n  \u003cimg\n    align=\"left\"\n    src=\"assets/logo.svg\"\n    alt=\"OpenID Connect Logo\"\n    width=\"200px\"\n  /\u003e\n\u003c/div\u003e\n\n# oidcc\n\nOpenID Connect client library for Erlang.\n\n[![EEF Security WG project](https://img.shields.io/badge/EEF-Security-black)](https://github.com/erlef/security-wg)\n[![Main Branch](https://github.com/erlef/oidcc/actions/workflows/branch_main.yml/badge.svg?branch=main)](https://github.com/erlef/oidcc/actions/workflows/branch_main.yml)\n[![Module Version](https://img.shields.io/hexpm/v/oidcc.svg)](https://hex.pm/packages/oidcc)\n[![Total Download](https://img.shields.io/hexpm/dt/oidcc.svg)](https://hex.pm/packages/oidcc)\n[![License](https://img.shields.io/hexpm/l/oidcc.svg)](https://github.com/erlef/oidcc/blob/main/LICENSE)\n[![Last Updated](https://img.shields.io/github/last-commit/erlef/oidcc.svg)](https://github.com/erlef/oidcc/commits/master)\n[![Coverage Status](https://coveralls.io/repos/github/erlef/oidcc/badge.svg?branch=main)](https://coveralls.io/github/erlef/oidcc?branch=main)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9602/badge)](https://www.bestpractices.dev/projects/9602)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/erlef/oidcc/badge)](https://scorecard.dev/viewer/?uri=github.com/erlef/oidcc)\n[![REUSE status](https://api.reuse.software/badge/github.com/erlef/oidcc)](https://api.reuse.software/info/github.com/erlef/oidcc)\n\n\u003cbr clear=\"left\"/\u003e\n\n\u003cpicture style=\"margin-right: 15px; float: left;\"\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: dark)\"\n    srcset=\"assets/certified-dark.svg\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: light)\"\n    srcset=\"assets/certified-light.svg\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n  \u003cimg\n    src=\"assets/certified-light.svg\"\n    alt=\"OpenID Connect Certified Logo\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n\u003c/picture\u003e\n\nOpenID Certified by [Jonatan Männchen](https://github.com/maennchen) at the\n[Erlang Ecosystem Foundation](https://github.com/erlef) of multiple Relaying\nParty conformance profiles of the OpenID Connect protocol:\nFor details, check the\n[Conformance Test Suite](https://github.com/erlef/oidcc_conformance).\n\n\u003cbr clear=\"left\"/\u003e\n\n\u003cpicture style=\"margin-right: 15px; float: left;\"\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: dark)\"\n    srcset=\"assets/erlef-logo-dark.svg\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: light)\"\n    srcset=\"assets/erlef-logo-light.svg\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n  \u003cimg\n    src=\"assets/erlef-logo-light.svg\"\n    alt=\"Erlang Ecosystem Foundation Logo\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n\u003c/picture\u003e\n\nThe refactoring for `v3` and the certification is funded as an\n[Erlang Ecosystem Foundation](https://erlef.org/) stipend entered by the\n[Security Working Group](https://erlef.org/wg/security).\n\n\u003cbr clear=\"left\"/\u003e\n\n\n\u003cpicture style=\"margin-right: 15px; float: left;\"\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: dark)\"\n    srcset=\"https://security-audit-logo.s3.eu-central-1.amazonaws.com/image_safe_logo_dark.png\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: light)\"\n    srcset=\"https://security-audit-logo.s3.eu-central-1.amazonaws.com/image_safe_logo_light.png\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n  \u003cimg\n    src=\"https://security-audit-logo.s3.eu-central-1.amazonaws.com/image_safe_logo_light.png\"\n    alt=\"Security Audit For Erlang and Elixir\"\n    width=\"170px\"\n    align=\"left\"\n  /\u003e\n\u003c/picture\u003e\n\nA security audit was performed by [SAFE-Erlang-Elixir](https://github.com/SAFE-Erlang-Elixir) more info [HERE](https://www.erlang-solutions.com/landings/security-audit-for-erlang-2/).\n\n\u003cbr clear=\"left\"/\u003e\n\n## Supported Features\n\n* [Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html)\n  (`[ISSUER]/.well-known/openid-configuration`)\n* [Client Registration](https://openid.net/specs/openid-connect-registration-1_0.html)\n* Authorization (Code Flow)\n  * [Request Object](https://openid.net/specs/openid-connect-core-1_0.html#RequestObject)\n  * [PKCE](https://oauth.net/2/pkce/)\n  * [Pushed Authorization Requests](https://datatracker.ietf.org/doc/html/rfc9126)\n  * [Authorization Server Issuer Identification](https://datatracker.ietf.org/doc/html/rfc9207)\n* Token\n  * Authorization: `client_secret_basic`, `client_secret_post`,\n    `client_secret_jwt`, and `private_key_jwt`\n  * Grant Types: `authorization_code`, `refresh_token`, `jwt_bearer`, and\n    `client_credentials`\n  * Automatic JWK Refreshing when needed\n* Userinfo\n  * [JWT Response](https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse)\n  * [Aggregated and Distributed Claims](https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims)\n* [Token Introspection](https://datatracker.ietf.org/doc/html/rfc7662)\n* Logout\n  * [RP-Initiated](https://openid.net/specs/openid-connect-rpinitiated-1_0.html)\n* [JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)](https://openid.net/specs/oauth-v2-jarm-final.html)\n* [Demonstrating Proof of Possession (DPoP)](https://datatracker.ietf.org/doc/html/rfc9449)\n* [OAuth 2 Purpose Request Parameter](https://cdn.connectid.com.au/specifications/oauth2-purpose-01.html)\n* Profiles\n  * [FAPI 2.0 Security Profile](https://openid.bitbucket.io/fapi/fapi-2_0-security-profile.html)\n  * [FAPI 2.0 Message Signing](https://openid.bitbucket.io/fapi/fapi-2_0-message-signing.html)\n\n## Setup\n\n**Please note that the minimum supported Erlang OTP version is OTP26.**\n\n\u003c!-- tabs-open --\u003e\n\n### Erlang\n\n**directly**\n\n```erlang\n{ok, Pid} =\n    oidcc_provider_configuration_worker:start_link(#{\n        issuer =\u003e \u003c\u003c\"https://accounts.google.com\"\u003e\u003e,\n        name =\u003e {local, google_config_provider}\n    }).\n```\n\n**via `supervisor`**\n\n```erlang\n-behaviour(supervisor).\n\n%% ...\n\ninit(_Args) -\u003e\n    SupFlags = #{strategy =\u003e one_for_one},\n    ChildSpecs = [\n        #{\n            id =\u003e oidcc_provider_configuration_worker,\n            start =\u003e\n                {oidcc_provider_configuration_worker, start_link, [\n                    #{\n                        issuer =\u003e \"https://accounts.google.com\",\n                        name =\u003e {local, myapp_oidcc_config_provider}\n                    }\n                ]},\n            shutdown =\u003e brutal_kill\n        }\n    ],\n    {ok, {SupFlags, ChildSpecs}}.\n```\n\n### Elixir\n\n**directly**\n\n```elixir\n{:ok, _pid} =\n  Oidcc.ProviderConfiguration.Worker.start_link(%{\n    issuer: \"https://accounts.google.com\",\n    name: Myapp.OidccConfigProvider\n  })\n```\n\n**via `Supervisor`**\n\n```elixir\nSupervisor.init(\n  [\n    {Oidcc.ProviderConfiguration.Worker,\n     %{\n       issuer: \"https://accounts.google.com\",\n       name: Myapp.OidccConfigProvider\n     }}\n  ],\n  strategy: :one_for_one\n)\n```\n\n**using [`igniter`](https://hex.pm/packages/igniter)**\n\n```bash\nmix oidcc.gen.provider_configuration_worker \\\n  --name MyApp.OidccConfigProvider \\\n  --issuer https://accounts.google.com\n```\n\n\u003c!-- tabs-close --\u003e\n\n## Usage\n\n\u003c!-- tabs-open --\u003e\n\n### Companion libraries\n\n`oidcc` offers integrations for various libraries:\n\n\u003c!-- TODO: Uncomment when available --\u003e\n\n- [`oidcc_cowboy`](https://hex.pm/packages/oidcc_cowboy) - Integrations for\n  [`cowboy`](https://hex.pm/packages/cowboy)\n- [`oidcc_plug`](https://hex.pm/packages/oidcc_plug) - Integrations for\n  [`plug`](https://hex.pm/packages/plug) and\n  [`phoenix`](https://hex.pm/packages/phoenix)\n- [`ueberauth_oidcc`](https://hex.pm/packages/ueberauth_oidcc) - Integration for\n  [`ueberauth`](https://hex.pm/packages/ueberauth)\n\n### Erlang\n\n```erlang\n%% Create redirect URI for authorization\n{ok, RedirectUri} = oidcc:create_redirect_url(\n    myapp_oidcc_config_provider,\n    \u003c\u003c\"client_id\"\u003e\u003e,\n    \u003c\u003c\"client_secret\"\u003e\u003e,\n    #{redirect_uri =\u003e \u003c\u003c\"https://example.com/callback\"\u003e\u003e}\n),\n\n%% Redirect user to `RedirectUri`\n\n%% Retrieve `code` query / form param from redirect back\n\n%% Exchange code for token\n{ok, Token} =\n    oidcc:retrieve_token(\n        AuthCode,\n        myapp_oidcc_config_provider,\n        \u003c\u003c\"client_id\"\u003e\u003e,\n        \u003c\u003c\"client_secret\"\u003e\u003e,\n        #{redirect_uri =\u003e \u003c\u003c\"https://example.com/callback\"\u003e\u003e}\n    ),\n\n%% Load userinfo for token\n{ok, Claims} =\n    oidcc:retrieve_userinfo(\n        Token,\n        myapp_oidcc_config_provider,\n        \u003c\u003c\"client_id\"\u003e\u003e,\n        \u003c\u003c\"client_secret\"\u003e\u003e,\n        #{}\n    ),\n\n%% Load introspection for access token\n{ok, Introspection} =\n    oidcc:introspect_token(\n        Token,\n        myapp_oidcc_config_provider,\n        \u003c\u003c\"client_id\"\u003e\u003e,\n        \u003c\u003c\"client_secret\"\u003e\u003e,\n        #{}\n    ),\n\n%% Refresh token when it expires\n{ok, RefreshedToken} =\n    oidcc:refresh_token(\n        Token,\n        myapp_oidcc_config_provider,\n        \u003c\u003c\"client_id\"\u003e\u003e,\n        \u003c\u003c\"client_secret\"\u003e\u003e,\n        #{}\n    ).\n```\n\nfor more details, see https://hexdocs.pm/oidcc/oidcc.html\n\n### Elixir\n\n```elixir\n# Create redirect URI for authorization\n{:ok, redirect_uri} =\n  Oidcc.create_redirect_url(\n    Myapp.OidccConfigProvider,\n    \"client_id\",\n    \"client_secret\",\n    %{redirect_uri: \"https://example.com/callback\"}\n  )\n\n# Redirect user to `redirect_uri`\n\n# Retrieve `code` query / form param from redirect back\n\n# Exchange code for token\n{:ok, token} =\n  Oidcc.retrieve_token(\n    auth_code,\n    Myapp.OidccConfigProvider,\n    \"client_id\",\n    \"client_secret\",\n    %{redirect_uri: \"https://example.com/callback\"}\n  )\n\n# Load userinfo for token\n{:ok, claims} =\n  Oidcc.retrieve_userinfo(\n    token,\n    Myapp.OidccConfigProvider,\n    \"client_id\",\n    \"client_secret\",\n    %{expected_subject: \"sub\"}\n  )\n\n# Load introspection for access token\n{:ok, introspection} =\n  Oidcc.introspect_token(\n    token,\n    Myapp.OidccConfigProvider,\n    \"client_id\",\n    \"client_secret\"\n  )\n\n# Refresh token when it expires\n{:ok, refreshed_token} =\n  Oidcc.refresh_token(\n    token,\n    Myapp.OidccConfigProvider,\n    \"client_id\",\n    \"client_secret\"\n  )\n```\n\nfor more details, see https://hexdocs.pm/oidcc/Oidcc.html\n\n\u003c!-- tabs-close --\u003e\n","funding_links":["https://members.erlef.org/join-us","https://erlef.org/sponsors#become-a-sponsor"],"categories":["Relying Parties (RP) Libraries"],"sub_categories":["Erlang"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferlef%2Foidcc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferlef%2Foidcc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferlef%2Foidcc/lists"}