{"adoption": {"forks": 254, "observed_at": "2026-08-28T04:03:28.739421+00:00", "stars": 1073}, "canonical_url": "https://ross.abutalabs.com/products/lua-resty-openidc", "card": {"archived": false, "artifact_type": "library", "description": "OpenID Connect Relying Party and OAuth 2.0 Resource Server implementation in Lua for NGINX / OpenResty", "domain": ["security", "web-development", "apis", "backend"], "enriched": true, "function": ["auth", "authorization", "middleware", "http-server"], "health_score": 93, "homepage": null, "language": "Lua", "license": "Apache-2.0", "license_family": "permissive", "maturity": "stable", "member_repos": ["zmartzone/lua-resty-openidc"], "name": "zmartzone/lua-resty-openidc", "platform": ["lua"], "pushed_at": "2026-07-01T14:56:19+00:00", "repo": "zmartzone/lua-resty-openidc", "stars": 1073, "tags": ["openid-connect", "oauth2", "jwt", "reverse-proxy", "nginx-lua", "session-management", "identity", "nginx", "openresty", "linux"], "topics": ["nginx", "openidconnect", "openidc", "oauth2", "jwt-bearer-tokens", "lua-resty-openidc", "lua"], "urls": [], "use_cases": ["add OpenID Connect login to an NGINX reverse proxy", "protect backend APIs with OAuth 2.0 bearer token validation", "validate JWT access tokens at the gateway", "terminate authentication in front of legacy origin servers", "introspect opaque access tokens against an authorization server", "manage authenticated user sessions in cookies, redis, or memcache"], "what_it_is": "A Lua library for NGINX/OpenResty implementing an OpenID Connect Relying Party and OAuth 2.0 Resource Server. It authenticates users via OpenID Connect Discovery and validates OAuth 2.0 bearer tokens, enabling reverse proxies to protect origin services without native auth support.", "when_to_avoid": ["you are not using NGINX/OpenResty as your gateway", "you need a full identity provider rather than a relying party/resource server", "you prefer application-level auth handled inside your app framework", "you need OAuth flows beyond the authorization code and bearer token use cases"], "when_to_choose": ["you run NGINX or OpenResty and need standards-based OIDC/OAuth2 at the proxy layer", "your origin servers cannot implement OpenID Connect themselves", "you need OpenID certified Relying Party behavior with discovery and code flow", "you want flexible session storage (cookie, shared memory, memcache, redis)"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/lua-resty-openidc", "repo": "zmartzone/lua-resty-openidc", "role": "main", "score": 81}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.739421+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:53:39.242369+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c37d6cbc19c1a974ecf4ab852e63c5bd4068fa8a1fba48ee07fdbef191ea7e54", "fetched_at": "2026-08-28T04:03:28.739421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zmartzone/lua-resty-openidc"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 90, "longevity": 100, "rhythm": 59}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4068, "days_push": 63, "days_rel": 63, "gap_med": 655, "n_releases_24m": 2}, "score": 81, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}