{"adoption": {"forks": 1908, "observed_at": "2026-08-28T04:06:06.732163+00:00", "stars": 2025}, "canonical_url": "https://ross.abutalabs.com/products/baeldung-spring-security-oauth", "card": {"archived": false, "artifact_type": "learning-resource", "description": "Getting Started withg Spring Security OAuth: ", "domain": ["security", "web-development", "tutorials", "developer-tools"], "enriched": true, "function": ["auth", "security", "developer-tools"], "health_score": 74, "homepage": "http://bit.ly/github-lsso", "language": "Java", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["Baeldung/spring-security-oauth"], "name": "Baeldung/spring-security-oauth", "platform": ["jvm"], "pushed_at": "2026-06-26T07:16:12+00:00", "repo": "Baeldung/spring-security-oauth", "stars": 2025, "tags": ["oauth2", "spring-security", "spring-boot", "jwt", "keycloak", "example-code", "authorization-server", "resource-server", "angular", "react-spa", "web-server"], "topics": ["spring-security-oauth", "oauth", "spring-security"], "urls": [], "use_cases": ["learn how to implement OAuth2 with Spring Security", "set up an authorization server with Keycloak and a Spring resource server", "secure a REST API with JWT tokens in Spring Boot", "implement the authorization code flow with PKCE in a JavaScript SPA", "see working examples of legacy Spring Security OAuth2 configurations", "understand JWS and JWK usage in Spring Security OAuth2"], "what_it_is": "A companion repository of example modules for Baeldung's Spring Security OAuth tutorials and the 'Learn Spring Security OAuth' course. It contains runnable Spring Boot authorization servers, resource servers, and Angular/React client apps demonstrating OAuth2 flows including JWT, JWS/JWK, and PKCE for JavaScript-only SPAs.", "when_to_avoid": ["you need a production-ready OAuth library or framework to drop into your project", "you want actively maintained, up-to-date example code for the latest Spring Security releases", "you are not using the Java/Spring ecosystem"], "when_to_choose": ["you are learning Spring Security's OAuth2 stack from Baeldung tutorials or the LSSO course", "you need runnable reference implementations of OAuth2 clients, resource servers, and authorization servers in Java", "you want to compare legacy Spring Security OAuth with the newer Spring Security 5 OAuth2 stack"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/baeldung-spring-security-oauth", "repo": "Baeldung/spring-security-oauth", "role": "main", "score": 72}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "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:06:06.732163+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:06.732163+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:59:45.154524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5cc2633c7601145bd4c2013d252fb02594fd921500622941ba0314cf885de735", "fetched_at": "2026-08-28T04:06:06.732163+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Baeldung/spring-security-oauth"}, {"content_hash": "9acefae633c599bf299aee646844e21c9267c95bca44dcd4166e2c0d87d7e874", "fetched_at": "2026-08-29T10:39:49.597684+00:00", "kind": "homepage", "missing": false, "url": "http://bit.ly/github-lsso"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 89, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3836, "days_push": 68, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 72, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}